20190117-多线程随笔
2019-01-17 本文已影响0人
熊大熊饿
取指 解码 执行 访存 写回
多线程:开启多个执行序列分别执行一项任务的不同部分。这些执行序列如果存在对同一份数据的操作,需要对该操作作互斥或同步处理。
互斥和同步是相对于这些操作之间的关系而言的。
互斥是指该操作具有排它性或者唯一性。(比如多个人同时申请一块gpu或者购买一张火车票 ,暂且称之为消费者-消费者竞争关系)
同步是指这两个操作之间存在之行先后顺序。(比如:对视频流处理的步骤分为几部分这种流水线方式运行或者生产者-消费者协作模式)
在Java中,开启多线程有两种方式
1. extend thread
启动:
run 在主调线程中立即启动
start 系统找一个时间来启动线程
2.implement runnable
相比于1的优势在于java不支持多继承,会影响任务类继承其它线程。
可重入锁:如果一个线程获取锁后还没释放可以再次获取锁。
同步代码块的锁锁的是当前对象this:因此两个线程调用一个对象的两个不同的synchronize方法,会发生同步。
中断
suspend 释放锁
yield 不释放锁