------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1. Thread.sleep(int ms)方法和Object中的wait()区别在哪里
|-- sleep()不需要锁支持
|-- wait()方法,需要锁的支持
|-- sleep()到时间线程休眠结束
|-- wait()需要其他线程唤醒
|-- sleep() 不释放锁,其他线程进不到同步中去
|-- wait() 释放锁,当被其他线程唤醒的时候,从新获取锁,才能继续运行
2. 生产者与消费者
|-- 通过生产者与消费者的案例,需要做唤醒全部线程notifyAll()
|-- 我们发现,唤醒本方是没有意义,唤醒全部是浪费资源的
|-- 只唤醒对方中的一个线程,JDK1.4版本之前,没有这样的功能
3.JDK1.5(包含)版本,提供了新的线程操作方式,Lock锁,做到唤醒对方中的一个线程
|-- 效率的大幅度提升替代传统的 synchronized代码块
|-- 开发了新的方法,替代wait notify notifyAll
await() signal() signalAll()
|-- 需要导入包:import java.util.concurrent.locks.*;
|-- Lock接口,子类对象ReentrantLock,lock(),unlock();
|-- Condition对象,替代了wait notify等方法
|-- 可以对线程进行分组管理
4. 停止线程的两个方式:根本原理结束run方法
|-- Thread类中的方法 void interrupt()
|-- 这个方法,会让处于等待状态的线程,抛出InterruptedException
|-- 生活中实例,我有一个朋友,失眠,找了一个很牛催眠师
朋友去了以后5分钟,睡着了
催眠师死了,我呢一板砖下午,哥们醒了,头部受伤(相当于抛出异常)
5. 守护线程
|-- 圣斗士五小强,守护智慧女神雅典娜
|-- void setDaemon(true)设置为守护线程
6. Thread类的toString()方法
|-- 线程优先级,多核CPU中,效果不是很明显了
|-- 线程的优先级分为3个当,最低,默认,最高
|-- void setPriority(int newPriority) 设置线程的优先级
7. Thread类 join方法
|-- 对线程进行运行时期的设置
|-- 执行join方法的线程,会一直执行完毕后,其他的线程再来抢夺CPU的资源
8. 线程的让步 Thread类的静态方法 yield()
//1.5后的锁来实现
//定义产品类,鼠标
import java.util.concurrent.locks.*;
class Mouse
{
private String name = "鼠标";
private int count = 0;
private boolean flag = false;//是false还没有生产
//建立lock锁对象
private Lock lock = new ReentrantLock();
//建立Condition对象,对线程进行分组管理
//使用lock接口中的方法 newCondition来获取Condition对象
Condition pro = lock.newCondition();
Condition cus = lock.newCondition();
public void proc(){
//获取锁
lock.lock();
while(flag){
try{pro.await();}catch(Exception e){}
}
System.out.println(name+" 生产第 "+(++count));
flag = true;
cus.signal();
//释放锁
lock.unlock();
}
public void cus(){
lock.lock();
while(!flag){
try{cus.await();}catch(Exception e){}
}
System.out.println(name+"消费第"+count);
flag = false;
pro.signal();
lock.unlock();
}
}
//定义生产者
class Proc implements Runnable
{
private Mouse m;
Proc(Mouse m){ this.m = m;}
public void run(){
while(true){
m.proc();
}
}
}
//定义消费者
class Cus implements Runnable
{
private Mouse m;
Cus(Mouse m){ this.m = m;}
public void run(){
while(true){
m.cus();
}
}
}
class ProductCustomers2
{
public static void main(String[] args)
{
Mouse m = new Mouse();
Proc p = new Proc(m);
Cus c = new Cus(m);
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
//System.out.println("Hello World!");
}
}
===============================================================================