软件构造感想8

并发

进程:私有空间,彼此隔离,多进程之间不共享内存 ,应用层面,但一个应用中可能包含多个进程
线程:程序内部的控制机制,程序共享、资源共享,共享内存

线程

可以通过继承Thread类或者Runnable接口来重写run方法,但不推荐
比较好的方式是通过匿名类的方式,如下所示

交错和竞争

如何切片由操作系统决定
交错:将一条或几条语句分解为多个低级操作,导致多个线程同时运行时,这些低级指令彼此交错,容易出现错误
竞争:程序的正确性(对后置条件和不变式的满足)取决于并发计算多个线程中事件的相对时间。也就是说,因为事件的交错执行,导致该线程执行的结果与只有其一个线程时执行的结果不同

用某些方法调用来主动影响线程之间的interleaving关系

  1. sleep
    根据系统计时器和调度程序的精度和准确性,使当前正在执行的线程进入休眠状态(暂时停止执行)达指定的毫秒数。 该线程不会失去任何监视器的所有权。
  2. interrupt
    中断该线程。
    如果该线程被阻塞在的调用wait() , wait(long) ,或者wait(long, int)的方法的Object类,或者在join() join(long) , join(long, int) , sleep(long) ,或sleep(long, int)这个类的方法,那么它的中断状态将被清除,它还将收到一个InterruptedException 。
    interrupted:测试是否当前线程已经中断。 该线程的中断状态由该方法复位。 换句话说,如果该方法是连续被调用两次,第二次调用通常将返回false。
    但是值得注意的是,中断一个没有上述等特殊方法的线程不会有任何效果。
  3. join
    该线程等待死亡。就是说程序执行到join时,只有当join的对象线程执行完时,才继续读下面的语句,也就是说给线程加上了处理顺序

线程安全

线程安全的四种方式:

  • 限制数据共享.:不设全局变量
  • 共享不可变数据:全局变量为不可变类型
  • 共享线程安全的可变数据.
  • 同步机制:通过锁的机制共享线程不安全的可变数据,变并行为串行

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年5月4日
下一篇 2020年5月4日

相关推荐