线程
一些多线程学习笔记
源来有你_
近我者甜
展开
-
模拟CAS
public class AtomicCompareAndSwap { private int value; public synchronized int getValue() { return value; } //比较 public synchronized int compareAndSwap(int expectValue, int newValue) { int oldValue = this.value;原创 2020-12-07 17:30:00 · 84 阅读 · 0 评论 -
volatile验证案例
可见性验证 private volatile static int num = 0; public static void main(String[] args) throws Exception { new Thread(new Runnable() { @Override public void run() { while (num == 0) {} } }).s原创 2020-11-28 11:52:01 · 56 阅读 · 0 评论 -
死锁
死锁入门public class deadLockDemo { public static void main(String[] args) { String lockA = "a"; String lockB = "b"; new Thread(new DeadLock(lockA, lockB)).start(); new Thread(new DeadLock(lockB, lockA)).start(); }}cl原创 2020-11-27 17:00:25 · 53 阅读 · 0 评论 -
自旋锁入门
自旋锁Demopublic class Spinlock { AtomicReference serialNumber = new AtomicReference(); public void LockMe() { Thread thread = Thread.currentThread(); System.out.println(thread.getName() + "加锁"); while (!serialNumber.compareAn原创 2020-11-27 15:10:43 · 45 阅读 · 0 评论 -
ReadWriteLockTest
读写锁public class TestReadWriteLock { public static void main(String[] args) { ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo(); for (int i = 0; i < 16; i++) { int finalI = i; new Thread(new Runna原创 2020-11-24 14:18:37 · 50 阅读 · 0 评论 -
线程计数
CountDownLatchpublic class TestCountDownLatch { public static void main(String[] args) { /** * 闭锁 * 1、CountDownLatch end = new CountDownLatch(N); //构造对象时候 需要传入参数N * 2、end.await() 能够阻塞线程 直到调用N次end.countDown() 方法才释放线程原创 2020-11-23 17:40:56 · 320 阅读 · 1 评论 -
ForkJoin任务拆分
ForkJoin任务拆分public class TestForkJoinSum { public static void main(String[] args) { ForkJoinPool forkJoinPool = new ForkJoinPool(); ForkJoinSumTask task = new ForkJoinSumTask(0L, 50L); Long invoke = forkJoinPool.invoke(task);原创 2020-11-23 10:49:26 · 181 阅读 · 0 评论 -
线程8锁练习
线程锁的8个问题public class TestThread8Monitor { /** * 1、两个普通同步方法,两个线程,打印输出 //one two * 2、给getOne新增sleep方法(以下测试getOne的sleep方法不要去掉),打印输出 //one two * 3、新增普通方法getThree,打印输出//three one two * 4、两个普通同步方法,两个number对象,两个线程 //two one * 5、更改get原创 2020-11-16 16:32:19 · 68 阅读 · 0 评论 -
线程池入门
线程池的简单使用public class TestThreadPool { /** * 一、线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。 * 二、线程池的体系结构: * java.util.concurrent.Executor :负责线程的使用与调度的根接口 * --**ExecutorService子接口:线程池的主要接口 * --ThreadPoolExe原创 2020-11-16 16:28:04 · 73 阅读 · 0 评论 -
线程按顺序交替执行
线程按顺序交替输出ABABAB…//newCondition能为多个线程提供不同的condition,详情见代码,特定的condition能唤醒特定的线程public class TestLockCondition { public static void main(String[] args) { Resource resource = new Resource(); new Thread(() -> { for (int原创 2020-11-13 13:19:09 · 76 阅读 · 0 评论