软件构造感想8

并发

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

线程

可以通过继承Thread类或者Runnable接口来重写run方法,但不推荐
比较好的方式是通过匿名类的方式,如下所示
在这里插入图片描述
这样来创建一个对象,但是光创建对象是不够的,还需要对对象使用start方法,才算真正创建了一个线程,值得注意的是,比如上述创建对象在main方法中,则main方法本身也算是一个线程

交错和竞争

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

用某些方法调用来主动影响线程之间的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的对象线程执行完时,才继续读下面的语句,也就是说给线程加上了处理顺序

线程安全

线程安全的四种方式:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值