
Thread中的静态方法直接用Thread.sleep()调用,参数为睡眠的时间,功能是让当前线程进入睡眠。
yield方法Thread中的静态方法,可以暂停当前线程对象,使相同优先级的线程执行,若不存在相同优先级的线程,则当前被暂停的线程执行,此方法区别于sleep方法,此方法中CPU不会暂停一直在工作,但是sleep方法中可能出现浪费CPU时间的情况。
join方法是将当前线程加入到调用join方法线程的尾部也就是等待调用该方法线程死亡当前线程才会开始执行;此外可以在join()中加参数表示等待调用该方法死亡时间做多为多少毫秒。
wait方法和notify方法wait方法是使线程进入等待状态只到被notify方法或notifyAll方法唤醒,notify方法是唤醒另一等待线程(是由调度器决定的),而notifyAll方法是唤醒所有等待该资源的线程。wait方法中可以加入等待时间,到了等待时间线程也会自动苏醒。区别于sleep,sleep是Thread中的静态方法而wait是Object类中的实体方法。
synchronized(锁机制)加了该关键字的方法,当在一个线程执行此方法,另一个线程也想执行此方法就会被锁机制拒绝只有当正在调用此方法的线程结束之后这个锁才会打开也就是被下一个线程调用,这也避免了多个线程同时对一个数据资源进行操作会出现数据脏读,重复读等现象。
使用方式用在方法上:public synchronized T m1(){}
public synchronized void produce() {
while (num >= max) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
num++;
System.out.println(Thread.currentThread().getName()+"----->生产 "+num);
this.notifyAll();
}
用在方法内:synchronized(参数) {
java语句
}
public void produce() {
synchronized {
while (num >= max) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
num++;
System.out.println(Thread.currentThread().getName()+"----->生产 "+num);
this.notifyAll();
}
}