此书多线程讲解的比较简单,摘录其中的精要于此,算是见证我的成长足迹吧......
---------------------------------------------------------------------------
多线程网络编程
Java语言中,所有的线程必须拥有run方法,是线程的入口。
创建线程两个方法:
1、 扩展Thread类重写其中run方法
2、 实现Runable接口重写run方法
启动一个线程:start方法;
线程状态
多线程不独占cpu,分时轮询cpu资源,故有线程状态一说;
休眠
简单中断不杀死线程方法:sleep静态方法;可以调用另外一个静态方法interrupt唤醒这个线程,不是必须的,线程sleep特定时间会自动醒来;
Wait、notify、notifyAll
多线程交互信息,协调操作。自动化生产线:用户输入自己喜欢的布料形状、电脑转换图形为各种参数、机器得到参数并生产相应布料
在一个线程中完成=====低效!!!
Public void run()
{
While(true)
{
//从用户得到图形
//将图形转化为参数
//将参数传给机器
}
)
使用wait和notify:两个线程配合按照特定顺序执行,此二者是个不错的选择
Wait:静态方法,使当前线程处于等待状态,系统释放被锁定的资源;
Notify:解除wait挂起状态。
两个线程:默认对象是一个参数传递对象
Public void userLoop() 用户线程
{
While(true)
{
Synchronized(this)
{
//计算完毕所有从用户得到图形并将图形转化为标准参数
// 并确保传给了默认对象,解除生产的wait状态
Notify();
}
}
}
Public void hardwareLoop() 生产线程
{
While()
{
Synchronized(this)
{
//等待用户计算参数完毕
Wait();
//生产
}
}
}
使用notifyAll,wait和notify适应于两个线程之间的协调,有时需要对所有等待的线程取消挂起,用到notifyAll。如生产者、消费者问题:书上此处好似有问题!
Public class MutipleWriters
{
Private Object item;
Public synchronized void write(Object o) throws
{
//还没有消费完,等待
While(item!=null)
Wait();
Item=0;
//通知任何一个消费者
NotifyAll();
}
Public synchronized Object read(Object o) throws
{
//还没有消费完,等待
While(item==null)
Wait();
Object myItem=Item;
Item=null;
//消费完毕,要求通知所有的线程,确保write线程取消等待
NotifyAll();
Return myItem;
}
}