package com.aliyun.test.learn;

import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock; public class ThreadTest { public static void main(String[] args) {
System.out.println("主线程");
} private static void reenTrantLockTest() {
ReentrantLock lock = new ReentrantLock(); for (int i = 0; i < 5; i++) {
new Thread(() -> {
lock.lock();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
lock.unlock();
}, String.valueOf(i) + " ======").start();
}
} private static void semaphoreTest() {
Semaphore semaphore = new Semaphore(3);
new Thread(() -> {
try {
semaphore.acquire();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
semaphore.release();
}, "t1").start(); new Thread(() -> {
try {
semaphore.acquire();
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
semaphore.release();
}, "t2").start(); new Thread(() -> {
try {
semaphore.acquire();
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
semaphore.release();
}, "t3").start(); new Thread(() -> {
try {
semaphore.acquire();
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
semaphore.release();
}, "t4").start();
} private static void cyclicBarrierTest() {
CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
new Thread(() -> {
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}, "t1").start(); new Thread(() -> {
try {
Thread.sleep(3000);
System.out.println("等我");
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}, "t2").start(); new Thread(() -> {
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}, "t3").start();
} private static void threadPool() throws InterruptedException, ExecutionException {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 2, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), Executors.defaultThreadFactory(), new ThreadPoolExecutor.DiscardPolicy());
threadPoolExecutor.execute(() -> {
System.out.println("hahaha");
});
threadPoolExecutor.shutdown(); ExecutorService executorService = Executors.newCachedThreadPool();
Future<Integer> submit = executorService.submit(() -> {
int a = 0;
int b = a + 1;
return b;
});
Integer o = submit.get();
System.out.println(0);
executorService.shutdown();
} /**
* CountDownLatch
* 两个线程同时运行,第三个线程等他们运行完再运行
*/
private static void test1() {
CountDownLatch latch = new CountDownLatch(2); Thread t1 = new Thread(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
latch.countDown();
}, "t1");
t1.start(); Thread t2 = new Thread(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
latch.countDown();
}, "t2");
t2.start(); Thread t3 = new Thread(() -> {
try {
latch.await();
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "t3");
t3.start();
}
}

多线程JUC练习的更多相关文章

  1. 多线程JUC并发篇常见面试详解

    @ 目录 1.JUC 简介 2.线程和进程 3.并非与并行 4.线程的状态 5.wait/sleep的区别 6.Lock 锁(重点) 1.Lock锁 2.公平非公平: 3.ReentrantLock ...

  2. Java多线程JUC

    1. volatile 关键字 多线程访问的时候,一个比较严重的问题就是内存不可见,其实在内存访问的时候每一个线程都有一个自己的缓冲区,每次在做修改的时候都是从主存取到数据,然后放到自己的缓冲区中,在 ...

  3. java多线程----JUC集合”01之 框架

    java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List(队列)和Set(集合). 1. List的实现类主要有: LinkedList, A ...

  4. Java多线程—JUC原子类

    根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...

  5. Java面试多线程/JUC等知识

    2021年6月30日完成此部分内容整理

  6. JUC详解

    一.Java多线程 -- JUC包源码分析1 -- CAS/乐观锁 乐观锁其实就是不加锁,用CAS + 循环重试,实现多个线程/多个客户端,并发修改数据的问题 使用AtomicStampedRefer ...

  7. Java多线程(6):锁与AQS(下)

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前说过,AQS(抽象队列同步器)是Java锁机制的底层实现.既然它这么优秀,是骡子是马,就拉出来溜溜吧. 首先用重入锁来实现简单的累加,就像这 ...

  8. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  9. Java多线程系列--“JUC锁”03之 公平锁(一)

    概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...

  10. Java多线程系列--“JUC锁”04之 公平锁(二)

    概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...

随机推荐

  1. HDLbits——Exams/2014 q4b

    题目要求 使用verilog描述如图所示得移位寄存器: Write a top-level Verilog module (named top_module) for the shift regist ...

  2. 2020ICPC沈阳I - Rise of Shadows

    剩余系 Problem - I - Codeforces 题意 给定 \(H,M,A\) \(2<=H,M<=10^9,\;0<=A<=\frac {H*M}2\) 假设一个钟 ...

  3. Finder是什么?Mac下的Finder有什么用?

    Finder是什么?Mac OS X系统下的Finder即相当于Windows系统下的"我的电脑"资源管理器.通过Finder,您能查看Mac 上几乎全部内容,包括应⽤软件.硬盘. ...

  4. 初步使用Web Notification 实现浏览器消息通知

    mesgNotice(data){ if(data.length>0){ if(window.Notification && Notification.permission != ...

  5. Linux非正式学习随笔(1)

    11.5进linux学的第一件事,找个中文输入法.Linux是一套免费的类unix操作系统GPL:gnu通用公共许可证.托马斯斯托曼提出gnu计划,自由软件思想的一个协议.Linux诞生1991年10 ...

  6. [Unity3D 小Tricks] 如何修改Unity3d脚本默认模板?

    众所周知,unity默认的模板总是Update()和Start(),但往往我们并不需要,每次都要手动删除非常麻烦. 但可以更改如下模板文件 C:\Program Files\Unity 2020.3. ...

  7. pycharm 安装步骤

    1.双击安装包 2.点击next 3.选择安装目录后点击next进入下一步 4.根据你电脑的实际情况选择安装32位还是64位 5.勾选 .py 后即可点击next进入下一步 6.默认,直接next 7 ...

  8. 关于*p++的执行顺序

    不确定*p++哪个优先级高了,想偷懒到百度找找解释,发现高赞的评论下也骂声一片,还是回头自己试试. 1 #include <iostream> 2 using namespace std; ...

  9. JDBC——连接SQL Server环境配置

    JDBC:使用JAVA语言操作关系型数据库的API.是一套标准的接口. 步骤 1.创建工程,导入驱动jar包 2.注册驱动:Class.forName("com.mysql.jdbc.Dri ...

  10. 新手IC617安装NCSU pdk

    新手IC617安装NCSU cdk 以CMOSedu网站为参考:https://cmosedu.com/videos/cadence/tutorial1/cadence_tutorial_1.htm ...