并发
进程:私有空间,彼此隔离,多进程之间不共享内存 ,应用层面,但一个应用中可能包含多个进程
线程:程序内部的控制机制,程序共享、资源共享,共享内存
线程
可以通过继承Thread类或者Runnable接口来重写run方法,但不推荐
比较好的方式是通过匿名类的方式,如下所示
交错和竞争
如何切片由操作系统决定
交错:将一条或几条语句分解为多个低级操作,导致多个线程同时运行时,这些低级指令彼此交错,容易出现错误
竞争:程序的正确性(对后置条件和不变式的满足)取决于并发计算多个线程中事件的相对时间。也就是说,因为事件的交错执行,导致该线程执行的结果与只有其一个线程时执行的结果不同
用某些方法调用来主动影响线程之间的interleaving关系
- sleep
根据系统计时器和调度程序的精度和准确性,使当前正在执行的线程进入休眠状态(暂时停止执行)达指定的毫秒数。 该线程不会失去任何监视器的所有权。 - interrupt
中断该线程。
如果该线程被阻塞在的调用wait() , wait(long) ,或者wait(long, int)的方法的Object类,或者在join() join(long) , join(long, int) , sleep(long) ,或sleep(long, int)这个类的方法,那么它的中断状态将被清除,它还将收到一个InterruptedException 。
interrupted:测试是否当前线程已经中断。 该线程的中断状态由该方法复位。 换句话说,如果该方法是连续被调用两次,第二次调用通常将返回false。
但是值得注意的是,中断一个没有上述等特殊方法的线程不会有任何效果。 - join
该线程等待死亡。就是说程序执行到join时,只有当join的对象线程执行完时,才继续读下面的语句,也就是说给线程加上了处理顺序
线程安全
线程安全的四种方式:
- 限制数据共享.:不设全局变量
- 共享不可变数据:全局变量为不可变类型
- 共享线程安全的可变数据.
- 同步机制:通过锁的机制共享线程不安全的可变数据,变并行为串行
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!