线程

同步的意义:

如果没有同步,一个线程的变化就不会被其他线程看到。同步不仅可以阻止一个县城看到对象处于不一致的状态之中,它还可以保证进入同步方法或者同步代码块的每一个线程,都看到同一个锁保护之前所有的修改效果。
共享对象引用
共享对象引用方法:
1.保存在静态域中,作为类初始化的一部分
2.将它保存在volatile域、final域或者通过正常锁定访问的域中。
3.将它放到并发集合

同步的基本方法:

1.继承 extends Thread
2.实现implement Runnbale
3.实现callable
用Runnbale:runnable可以共用一个实例,实现资源共享。

java.util.concurrent中更高级的工具分为三类:

1.Executor Framwork
2.并发集合(Current Collection):CurrentHashmap 、Collections.SynchronizedMap 、Hashtable
3.同步器 Synchronizer: CountDownLatch

线程的生命周期:

新建 start() 就绪 运行 dead

获得处理器资源 失去处理器资源
阻塞:sleep时间到、IO方法返回、获得同步锁

dead:调用stop()、destroy(),run()执行完成,Error或Exception

volatile:

非原子性操作不可使用,例如++,
例子:(AtomicLong)

单例模式

(饿汉模式)

public class Singleton{
    private static Singleton instance=new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
            return insance;
 }
}

Java提供四中同步方法:

http://blog.csdn.net/monkey_d_meng/article/details/6251879/
1.notify() 、 wait()生产者消费者:
2.BlockingQueue

线程池:

允许客户将后台线程异步处理的工作加入队列,客户端可以调用一个方法,让后台线程完成了已经在队列中的所有工作之后,优雅的结束自己。

ExecutorService executor= Executors.newFixedThreadPool(3);  
  for (int i = 0; i < 10; i++) {  
   final int index = i;  
   executor.execute(new Runnable() {  
    public void run() {  
     try {  
      System.out.println(index);  
      Thread.sleep(2000);  
     } catch (InterruptedException e) {  
      e.printStackTrace();  
      executor.shutdown();
     }  
    }  
   });  
  }  
 }  

你可能感兴趣的:(线程)