1.等待唤醒机制:wait() notify() notifyall()
都使用在同步中,因为要对外持有监视器的线程操作
这些方法在操作同步中线程时,都必须要标识它们所操作线程只有的锁
只有同一锁上的被等待线程可以被同一锁上notify唤醒
不可以对不同锁中的线程进行唤醒(锁可以是任意对象)
2.notify在线程池中遵循先进先出原则
多个线程多个进程while(flag)+notifyAll()
3.lock 接口,condition接口lock接替synchronized,condition替代Object监视器方法
import java.util.consurrent.lock.*;
private Lock lock=new Reentranlock();
private condition_con condition=lock.newCondition();
private condition_pro condition=lock.newCondition();
public void set(String a,int b) throws InterruptedException
{
lock.lock();
try{
while(flag)
condition_con.await();//等待
线程语句
` }
flag=true;
condition_pro.signal();//唤醒
}
finally{
lock.unlock()//释放锁的动作一定要执行
}
}
lock的好处:可以定义多个condition,方便本方只唤醒对方的操作
3.停止线程;run方法结束。多线程运行通常都是循环结构
控制循环结构,就可以让run方法结束,也就是线程结束
当线程处于冻结状态,就不会读取标记,线程就不会结束
当没有指定的方式让冻结方式恢复到运行状态,这时需要对冻结进行清除
Interrupt:将处于冻结状态的线程强制唤醒,会发生异常
catch(InterruptException e){
}
4.线程名.setDaemon:主线程结束后,该语句设定的线程自动结束
5.线程名.join:等待该线程执行完,抢夺CPU执行权,主线程处于冻结状态,
结束后主线程返回
t1.start();
t2.start();
t1.join();
t1和t2交替执行,当t1执行完时,主线程返回执行,而不要考虑t2线程
6.优先级(1-10)
所有线程默认优先级是5
线程名setPriority(int newPriority)写在括号里面:Thread.MAX_PRIORITY(优先级10)
Thread.MIN_PRIORITY(优先级1)
Thread.NORM_PRIORITY(优先级5)
7.Thread.yield();临时释放执行权,写在同步线程函数里面
|
|