![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
hgkdzbf6
研究兴趣: java,打杂,小学奥数, 板绘, 编队控制, slam, 深度学习.
展开
-
多线程-java线程
java线程 6个线程状态 New:尚未启动的线程的线程状态 Runnable:可以运行线程的状态,等待CPU调度。 Blocked:线程阻塞,等待监视器锁定的线程状态,处于synchronized同步代码块,或者方法当中被阻塞。 Waiting:等待线程的线程状态,运行需要等待其他线程的通知:Object.wait(), Thread.join(), LockSupport.park() Timed Waiting:带超时的线程等待状态。比如下面带超时的例子:Thread.sleep(), Object原创 2020-08-25 17:37:29 · 79 阅读 · 0 评论 -
多线程-内存屏障和CPU缓存
内存屏障和CPU缓存 CPU,多级缓存。 L1一般在32k到4096KB,数据缓存,指令缓存。 多核共享一个L3缓存。 缓存同步协议 MESI协议: Modified 修改态, 此行的cache行已经被修改过(脏行) Exclusive 专有态,此行的cache内容,和主存相同,但是不出现在其他cache中。 Shared 共享态,这一行的内容等同于主存,但是也存在于其他cache中。 Invalid,无效态,这一行cache无效。 多个处理器的时候,单个CPU对缓存中的数据进行了改动,需要通知其他cp原创 2020-08-25 17:36:22 · 187 阅读 · 0 评论 -
多线程-线程终止
线程中止 不正确的线程中止 Stop:中止线程,并且清除监视器锁的信息,可能导致线程安全问题。 destroy(从未实现过这个方法)。 public class Demo{ public static void main(String[] args)throws InterruptedException{ StopThread thread = new StopThread(); thread.start(); Thread.sleep(100原创 2020-08-25 17:32:22 · 90 阅读 · 0 评论 -
多线程-线程通信
线程通信 通信方式 文件共享 网络共享 共享变量 jdk提供的线程协调API: suspend/resume wait/notify park/unpark 文件共享 一个线程往文件写入数据,一个从文件中读入数据 变量共享 共享静态变量这种。 线程协作API 生产者,消费者模型。 线程1区买包子,没有包子不执行,挂起 线程2生产包子,通知线程1继续执行。 被弃用的suspend和resume的问题 public static Object bzd = null; public void s原创 2020-08-25 17:31:36 · 73 阅读 · 0 评论 -
多线程-线程封闭
线程封闭 数据被封闭在各自的线程之中 具体实现:ThreadLocal,局部变量。 ThreadLocal ThreadLocal是JAVA当中的一种特殊的变量。 是个线程级别的变量,每个线程都有一个ThreadLocal,就是每个线程都有拥有了自己的一个独立变量,竞争条件被彻底消除,在并发模式下是绝对安全的变量。 ThreadLocal<T> var = new ThreadLocal<T>(); 会自动在每个线程上,创建一个T的副本,副本之间彼此独立,互不影响原创 2020-08-25 17:30:38 · 82 阅读 · 0 评论 -
多线程-线程池
线程池 线程不是越多越好: 在java中是一个对象,更是操作系统的资源,线程创建,销毁需要时间,如果创建时间+销毁时间>执行任务时间,就很不核算。 java对象占用堆内存,操作系统线程占用系统内存,一个线程默认栈大小为1M,这个栈空间是需要从系统内存中分配的。 操作系统需要频繁切换线程上下文 线程池概念 线程池管理器:创建并管理线程池,包括创建,销毁和添加新任务。 工作线程:在没有任务时处于waiting状态,可以循环的执行任务。 任务接口:每个任务必须实现的接口,规定了入口,执行完的收尾原创 2020-08-25 17:28:52 · 93 阅读 · 1 评论