多线程JUC练习
- 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练习的更多相关文章
- 多线程JUC并发篇常见面试详解
@ 目录 1.JUC 简介 2.线程和进程 3.并非与并行 4.线程的状态 5.wait/sleep的区别 6.Lock 锁(重点) 1.Lock锁 2.公平非公平: 3.ReentrantLock ...
- Java多线程JUC
1. volatile 关键字 多线程访问的时候,一个比较严重的问题就是内存不可见,其实在内存访问的时候每一个线程都有一个自己的缓冲区,每次在做修改的时候都是从主存取到数据,然后放到自己的缓冲区中,在 ...
- java多线程----JUC集合”01之 框架
java集合的架构.主体内容包括Collection集合和Map类:而Collection集合又可以划分为List(队列)和Set(集合). 1. List的实现类主要有: LinkedList, A ...
- Java多线程—JUC原子类
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类. 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIn ...
- Java面试多线程/JUC等知识
2021年6月30日完成此部分内容整理
- JUC详解
一.Java多线程 -- JUC包源码分析1 -- CAS/乐观锁 乐观锁其实就是不加锁,用CAS + 循环重试,实现多个线程/多个客户端,并发修改数据的问题 使用AtomicStampedRefer ...
- Java多线程(6):锁与AQS(下)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前说过,AQS(抽象队列同步器)是Java锁机制的底层实现.既然它这么优秀,是骡子是马,就拉出来溜溜吧. 首先用重入锁来实现简单的累加,就像这 ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- Java多线程系列--“JUC锁”04之 公平锁(二)
概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...
随机推荐
- 打卡node day01--基础和fs内置模块
一, 检查 node 版本 node -v 或 node --version 二,检查安装过的node 版本(nvm node 版本管理工具 安装链接 参考百度) nvm ls 三,切换node 版 ...
- Codensity T408 视频转码器
Codensity T408 视频转码器 微信: orihard2014
- shell中;与&&的区别
&& 后一个命令执行需要依赖前一个命令执行成功 :各个命令都会依次执行,无论成功与否
- WDA学习(22):WDA PLG,Application跳转传参
1.15 WDA PLG,Application跳转传参 本实例Outbound Plugs页面跳转传参,URL跳转Application传参. 1.创建Component:Z_TEST_WDA_L6 ...
- pgsql给表重命名
alter table "pavement_damage_dtl_temp" rename to "pavement_damage_dtl"; 搜索 复制
- 杭电oj 平方和与立方和
给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和. Input 输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成. Output 对于每组输入数据,输出一 ...
- memoのVIM
必须给今天看到的vim相关的东西记录一下! vim文档中文化 https://github.com/yianwillis/vimcdoc 速查表 https://github.com/skywind3 ...
- 从redis中取出数据并转成java对象
1.//数据存入redis中 redisTemplate.opsForValue().set(loginame, JSON.toJSONString(users),1000,TimeUnit.SECO ...
- 5G工业网关在智能工厂的应用案例
智能工厂是5G技术的重要应用场景之一.利用5G网络将生产设备无缝连接,并进一步打通设计.采购.仓储.物流等环节,使生产更加扁平化.定制化.智能化,从而构造一个面向未来的智能制造网络. 5G 作为最优的 ...
- node.js发送短信验证码(附带60秒倒计时插件)
推荐一个简单且功能齐全的发送短信验证码接口1.安装下载后的SDK只包含一个zhenzisms.js文件,直接导入到工程中即可使用.下载 2.用法引入模块 const zhenzismsClient = ...