多线程儿

来源:互联网 发布:趣医网络 编辑:程序博客网 时间:2024/04/28 19:48

进程:执行中的程序,一个进程包含多个线程
进程相互独立必须开辟独立空间,线程可以共享数据
无法使用stop()来停止线程,stop()已经废弃。比较好的方法是在run()中设置判断变量(例如boolean变量)

线程的生命周期

1,创建状态:当用new操作符创建一个新线程对象的时候,是一个空线程
2,可运行状态Runnable:调用了start()方法
3,不可运行:sleep()方法【如果是同步模块,不释放同步锁头】,wait()方法,线程的输入输出阻塞
4,返回可运行:sleep方法的时间结束,notify() or notifyAll()方法,输入输出阻塞结束
5,消失:run()方法结束

线程的优先级
1到10:
可以从父类继承
可以使用setPriority()方法

多线程如果对同一对象的成员变量进行操作,会影响彼此
而反观局部变量则不会有这个问题

synchronized同步问题
多线程同时操作同一块地方,如果有读写操作,必定会出现混乱的问题,所以要在这一块地方上加上同步锁
锁头
每一个Java对象都有一个锁(lock)或者叫做监视器(monitor)
如果一个线程访问了一个对象的上锁方法,这个时候其他的线程是无法进入的,除非方法结束,或者抛出异常

这里面分为几种情况
非静态方法上锁,则锁是这个对象
如果是静态方法上锁,则这个锁是这个对象的类对象(即使很多个相同的对象,也有且只有一个类对象)
方法块上上锁,这个是比较细致的锁,可以精确的控制上锁的位置(推荐)

线程之间的通讯

wait() notify() notifyAll()这三个方法必须是在synchronized中执行

wait()方法,让本线程进入可运行状态,调用后不是立马进入,而是等同步方法快结束(try/catch)

0 0