| 我也进来复习了哥们 不过我认为你应该在加上 
 同步的前提:
 1、必须要有两个或者两个以上的线程。
 2、必须是多个线程使用同一个锁。
 
 同步函数的锁是this
 静态同步函数的锁是Class对象
 
 单例设计模式之懒汉式:
 class Single
 {
 private Single(){}
 private static Single single = null;
 public  staticSingle getInstance()
 {
 if(single==null)
 {//避免每次都判断锁,只有当对象为null的情况下才判断
 synchronized(Single.class)
 {
 if(single==null)/*如果一个线程跑到第一个if后死了,另一个线程进来创建了对象释放了锁,然后那个线程醒了,进来后还要判断*/
 single =new Single();
 }
 }
 return single;
 }
 }
 
 wait() notify() notifyAll()都是用在同步中,因为要对持有监视器(锁)的线程操作,所以使用在同步中,因只有同步中有锁。
 为什么这些操作线程的方法要定义在object类中呢?
 答:因为这些方法在操作同步中的线程时,都必须要标示他们所操作线程只有的锁。
 只有同一个锁上的被等待线程可以被同一个锁上的线程被notify唤醒。同时不可以对不同所中的线程进行唤醒。
 也就是说等待和唤醒必须是同一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法定义在object中。
 
 Notify():往往唤醒线程池中的第一个,所以可能唤醒本方导致数据错乱全部等待。可以用notifyall全部唤醒。
 当出现多个生产者消费者同时要做这件事情的时候要用循环while和notifyall,(通用1.while判断标记,2.把对方唤醒)当只有一个生产者和消费者时可以用if
 
 停止线程:Stop方法已过时,如果停止线程呢:只有一种,run()方法结束
 原理:开启多线程运行,运行代码通常是循环。只要控制循环,皆可以让run方法结束即线程结束。
 
 守护线程:线程对象.setDaemon(true);将该线程标记为守护线程或用户线程。
 当正在运行的线程都是守护线程时,Java虚拟机退出,程序结束。
 
 多线程(Join方法)
 特点:当A线程执行到了B线程的.join()方法时,那么A线程就会等待B线程都执行完A才会执行。它可以用于临时加入线程执行
 
 
 
 |