![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java多线程
johnllllll
这个作者很懒,什么都没留下…
展开
-
Java多线程(一):创建线程
一、继承Thread类public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } public void run() { System.out.println(this.name); } pub...原创 2018-07-27 13:37:03 · 93 阅读 · 0 评论 -
Java多线程——线程池
一、为什么要使用线程池降低资源消耗;提高响应速度;提高线程的可管理性。二、Executor框架 将任务和线程本身解耦。Executor将任务提交与执行解耦开来,还提供了对生命周期的支持和监视机制。1.Executorpublic interface Executor { void execute(Runnable command);}提供了exec...原创 2019-06-26 07:48:41 · 165 阅读 · 0 评论 -
ThreadLocal原理与内存泄漏问题
ThreadLocal原理当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。存储结构public class Thread implements Runnable ...转载 2019-06-26 07:52:41 · 123 阅读 · 0 评论 -
Java多线程——Lock、ReentrantLock和Condition
一、Lock接口Lock接口相比于synchronized而言,Lock接口可以显示的,可中断的、定时获取锁。public interface Lock {void lock(); 获取锁void unlock(); 释放锁void lockInterruptibly() throws InterruptedException;在获取锁的过程中能响应中断boolean ...原创 2019-03-08 09:03:30 · 123 阅读 · 0 评论 -
Java多线程——Thread基础
一、定义publicclass Thread implements Runnable {}可以看到Thread类本身也继承了Runnable接口二、主要属性 private volatile String name; //线程的名字 private int priority; //线程优先级 /* Whether or not to single_step...原创 2019-02-20 11:48:41 · 261 阅读 · 0 评论 -
Java多线程——synchronized原理
Java对象头Java对象头中以一字宽的长度存储Mark Word,里面包含了对象的hashCode,分代年龄和锁标记位,Mark Word在32位JVM中的默认存储结构如下:运行期间,Mark Word的数据类型会随着锁标记位的改变而改变,一共有四种情况: 锁的级别从低到高依次是,无锁,偏向锁,轻量级锁,重量级锁,其中偏向锁和轻量级锁是在Java1.6时引入的,这几个状...转载 2019-02-19 09:31:37 · 119 阅读 · 0 评论 -
Java多线程——volatile详解
volatile的内存语义(1)可见性(2)禁止指令重排序注:volatile的非原子性,在i++或i=i+1;会出现不安全。可见性——缓存一致性协议(1)Lock前缀指令会引起处理器缓存写到内存,线程的本地内存失效,别的线程只能从主存中读取数据。而本地内存的值会立马刷新到主存中去。(Lock又分为锁总线还是锁缓存)(2)一个处理器的缓存回写到内存会导致其他处理器的缓存...原创 2019-02-18 10:38:50 · 273 阅读 · 0 评论 -
Java多线程(二):线程的状态
1、新建状态(New):新创建了一个线程对象。2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就...原创 2019-02-17 11:08:24 · 126 阅读 · 0 评论 -
Java多线程——AQS解析(AbstractQueuedSynchronizer)
一、简介队列同步器AbstractQueuedSynchronizer是用来构建其他同步组件的基础框架,它维护了一个volatile的int变量state来表示同步状态,如ReetrantLock用它来表示所有者线程重复获取所得次数,ReetrantReadWriteLock用它来表示读写锁获取次数,Semaphore用它来表示剩余许可的数量,CountDownLatch用它来表示计数值,Fu...原创 2019-06-26 07:51:59 · 129 阅读 · 0 评论 -
单例模式
一、饿汉模式public class Singleton1 { //1.定义资源 private static Singleton1 instance = new Singleton1(); //2.构造函数私有化 private Singleton1() {} //3.获取资源 public static Singleton1 getInstance() { return ...原创 2018-09-12 15:42:30 · 102 阅读 · 0 评论 -
Java多线程——CountDownLatch、CyclicBarrier、Semaphore和Exchanger
CountDownLatch(闭锁)使一个或多个线程等到其他线程执行完成后再执行。CountDownLatch内部会维护一个初始值为线程数量的计数器,主线程执行await方法,如果计数器大于0,则阻塞等待。当一个线程完成任务后,计数器值减1。当计数器为0时,表示所有的线程已经完成任务,等待的主线程被唤醒继续执行。构造器中的计数值(count)实际上就是闭锁需要等待的线程数量。这个值只能...原创 2019-06-26 07:51:33 · 123 阅读 · 0 评论