java基础之静态代理模式、Lamda表达式以及线程的睡眠

静态代理模式

1、真实对象和代理对象都需要使用同一接口

2、代理对象要代理真实对象

代理对象可以做真实对象做不了的东西;

真实对象可以专注于自己的东西;

public class Testc {
   public static void main(String[] args) {
       company company = new company(new de());
       company.marr();

  }

}

interface marry{
   void marr();
}

class de implements marry{
   @Override
   public void marr() {
       System.out.println("好耶!!");
  }
}
class company implements marry{
   private marry hi;

    public company(marry hi) {
        this.hi = hi;
    }

    @Override
    public void marr() {
        before();
        this.hi.marr();
        after();


    }

    private void after() {
        System.out.println("结婚之后");
    }

    private void before() {
        System.out.println("结婚之前");
    }
}

Lamda表达式

意义:避免匿名内部定义过多;

实质属于函数式编程;

任何接口,只包含唯一一个抽象方法的就是函数式接口—可以用Lamda表达式

       fine m=null;

        m = (a) -> {
           System.out.println("Lamda!" + a);
      };
        m.good(6);

//去掉括号,参数只能有一个才能去掉括号
       m = a -> {
           System.out.println("Lamda!" + a);
      };
       m.good(6);

//去掉花括号 (只能有一行代码,否则代码块)
        m=a-> System.out.println("Lamda!!!!"+a);
        m.good(90);



interface fine{
   void good(int a);
}  //接口

更加的简单;

多个参数也可以去掉参数类型,但是要去掉都去掉,必须加上括号;

线程的停止

建议是让线程自己正常停止,不建议死循环;

建议使用标志位,自己设置一个标志位;

不要使用Stop,destory等方法;

public class Threadstop implements Runnable {
  private boolean flag=true;
   @Override
   public void run() {
       int i=0;
       while (flag){
           System.out.println("线程..."+i++);
      }
  }
   //线程的标志位
   public void  stop(){
       flag=false;
  }

   public static void main(String[] args) {
       Threadstop t1 = new Threadstop();
       new Thread(t1).start();
       for (int i = 0; i < 500; i++) {
           System.out.println(i);
           if (i==250){
               t1.stop();
               System.out.println("线程停止!");
          }
      }
  }
}
java基础之静态代理模式、Lamda表达式以及线程的睡眠

线程和主函数一直都在运行,在250 的时候,启动了Stop标志位,线程停止,而主函数继续跑完。

线程休眠

sleep的1000=1秒;

异常为InterruptedException;

Sleep可以模拟网络延迟,倒计时等

每一个对象都有一个锁,sleep不会释放锁;

倒计时:

package Stop;

public class Testsleep {
   public static void tendown() throws InterruptedException {
       int num=10;
       while (true){
           Thread.sleep(1000);
           System.out.println(num--);
           if(num<=0){
                   break;
              }
          }
      }

   public static void main(String[] args) {
       try {
           tendown();
      } catch (InterruptedException e) {
           e.printStackTrace();
      }
  }
  }

打印系统当前时间:

package Stop;

import java.text.SimpleDateFormat;
import java.util.Date;


public class Nowtime {
   public static void main(String[] args) {
       Date nowdata = new Date(System.currentTimeMillis());
       while (true) {
           try {
               Thread.sleep(1000);
               System.out.println(new SimpleDateFormat("HH:mm:ss").format(nowdata));
               nowdata = new Date(System.currentTimeMillis());
          } catch (InterruptedException e) {
               e.printStackTrace();
          }
      }
  }
}

java基础之静态代理模式、Lamda表达式以及线程的睡眠

 

上一篇:linux 驱动学习笔记01--Linux 内核的编译


下一篇:[Java8] lamda表达式一览