加了同步问题还在?
想想前提:1.多线程运行代码是不是都同步了,2.是不是同一个锁
wait();
notify();
notifyAll();
都使用在同步中,因为要对持有监视器(锁)的线程操作。
所以要使用在同步中,因为只有同步才具有锁。
为什么这些操作线程的定义object中呢?
因为这些方法在操作同步中线程时,都必须要标识它们所操作线程持有的锁。
因为wait()和notify()必须要是在同一个锁。
而锁可以是任意对象,所以可以被任意对象调用的方法定义object类中。
JDK1.5的新特性:提供了线程升级解决方案
1.Lock代替了synchronized
2.Condition代替了Object监视器方法,将(wait,notify,notifyAll)封装成
Condition对象,Condition对象可以生成多个,也就是说可以有多组
(wait,notify,notifyAll),可以调用唤醒对方的函数
3.该对象可以通过Lock锁进行获取。
守护线程:setDaemon()
必须在启动线程前调用
主线程结束了,守护线程也会跟着结束。
等待线程:join()(需要抛出异常)
当A线程执行到了B线程的join()方法时,A就会等待,等B线程都执行完,A才执行,
join可以用来临时加入线程执行。
设置优先级:setpriority(Thread.MAX_PRIORITY)//优先级设置最高
yield():暂停当前正在执行的线程对象,并执行其它的线程。让每个线程都有机会
执行。类似于交替执行
|
|