线程

一,单例模式

  public class Single {

    private static Single ourInstance = new Single();

    //构造方法私有,Single对象只能被new一次

    public static Single getInstance() {

      return ourInstance

    }

    private Single() {
    }

  }

二,线程

  1,线程是为了让计算机在同一时间做不同的事,本质是cpu等资源在不断的切换线程的执行

  2,启动线程使用线程对象的start方法

  3,创建线程的方式一:子类继承覆写方法方式

    public class ThreadA extends Thread {

      @Override

      public void run(){

      需要执行的代码块

      }

    }

  4,创建线程的第二种方式:Runnable接口的实现类通过Thread的构造方法传入线程

    Runnable的实现类:

      public class RunnableC inmplements Runnable {

        @Override

        public void run() {

        需要执行的代码块

        }

      }

    Thread通过构造方法传入实现类

      RunnableC runnableC = new RunnableC( ); 

      Thread c = new Thread (runnableC)

      c.start( );

三,线程的变种形式

  1,匿名对象:直接new出对象,而不给这个对象变量名,只有一次调用这个方法的机会

    new ThreadA().start();

    

  2,匿名内部类:没有类名,在构造方法的小括号后加上{},那么这个{}就代表一个类,这样在{}中就可覆写父类Thread的方法,例 Thread(){};  {}相当于继承了父类Thread的子类

    Thread a = new Thread(){  

      @Override

      public void run(){

      需要执行的代码块

      }

    };  //父类引用指向子类对象

    a.start();

 

    new Thread(new Runnable(){

      @Override

      public void run(){

      代码块

      }

 

    }).start();

四,线程安全问题

  1,Thread.currentThread().getName();显示哪个线程执行了次代码

  2,线程锁:关键字synchronized确保同一时间由一个线程访问该代码块

    private final Object lock = new Object();//创建锁,可以是任意类型,但是要加关键字final

    public  fun(){

      synchronized(lock){

      需要上锁的代码块

      }

    }

五,脏读

 

 

 

posted on 2018-04-17 20:19  北冥丶中郎将  阅读(166)  评论(0编辑  收藏  举报