![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
taiguolaotu
这个作者很懒,什么都没留下…
展开
-
CountDownLatch 批量更改使用,
【代码】CountDownLatch 批量更改使用,原创 2023-10-06 15:57:25 · 193 阅读 · 0 评论 -
springboot 开启线程异步操作
【代码】springboot 开启线程异步操作。原创 2023-07-10 18:25:20 · 130 阅读 · 0 评论 -
多线程参数详解参考
参考链接1参考链接2这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!原创 2021-07-26 10:04:02 · 210 阅读 · 0 评论 -
线程安全案例
参考博客这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!原创 2021-02-02 21:45:20 · 79 阅读 · 0 评论 -
继承 Thread 类
public class Wait { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("Ddd"); } }); Thread t原创 2020-12-07 17:09:34 · 135 阅读 · 0 评论 -
并发包下phaser可以模拟CyclicBarrier循环屏障以及CountDownLatch计数器的作用
代码import java.util.concurrent.Phaser;//Phaser 相位器//模拟CyclicBarrier循环屏障的作用public class PhaCyclicBarrier { public static void main(String[] args) {// Phaser phaser = new Phaser(5);// getInfo(phaser); test2(); } publ原创 2020-08-14 14:29:15 · 153 阅读 · 0 评论 -
并发包下 CountDownLatch的使用 倒计时器 可以替换join方法的使用
代码import java.util.concurrent.CountDownLatch;public class testLatch { public static void main(String[] args) { CountDownLatch begin = new CountDownLatch(1); CountDownLatch end = new CountDownLatch(2);// try{// S原创 2020-08-13 17:03:56 · 187 阅读 · 0 评论 -
并发类CyclicBarrier的使用
代码import java.util.concurrent.CyclicBarrier;public class TestCyclicBarrier { public static void main(String[] args) { CyclicBarrier cb = new CyclicBarrier(3); class Travel extends Thread{ String name; String city; int time; public T原创 2020-08-08 22:59:59 · 123 阅读 · 0 评论 -
CountDownLatch的使用
代码import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;//# $ 号打印50时,三个线程交替执行public class TestCountDownLatch { public static void main(String[] args) { CountDownLatch cdl = new CountDownLatch(2); CyclicBarrier cb =原创 2020-08-08 22:29:10 · 140 阅读 · 0 评论 -
Semaphore信号量在多线程的使用
代码import java.util.ArrayList;import java.util.List;import java.util.concurrent.Semaphore;import java.util.concurrent.atomic.AtomicBoolean;//电话亭示例public class TestSemaphore { public static void main(String[] args) { List<PhoneRoom> rooms =原创 2020-08-08 18:42:49 · 166 阅读 · 0 评论 -
ForkJion 并发cpu 数组内获取最大元素
代码import java.util.Random;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveTask;public class TestForkJoinMax { public static void main(String[] args) { Random r = new Random(); int[] data = new int[40000000]; for(原创 2020-08-07 17:28:56 · 160 阅读 · 0 评论 -
ForkJoin中 RecursiveAction的使用 数组排序小例子
代码import java.util.Arrays;import java.util.Random;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveAction;public class TestForkJoinSort { public static void main(String[] args) { Random random = new Random(); int原创 2020-08-06 17:47:27 · 204 阅读 · 0 评论 -
ForkJoin RecursiveTask宏观并行微观并行 多线程中的并发,并行与串行的区别。 并行,在用同一个时刻执行多个线程
代码import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveTask;//递归算//ForkJoinPool 自动创建每个线程的任务队列public class TestForkJoinAdd { public static void main(String[] args) { //打印本机当前可用的处理器(cpu)的(指核数) System.out.println(Runtime.原创 2020-08-06 15:42:31 · 336 阅读 · 0 评论 -
多线程的例子 对int类型进行操作 开启十个线程
上代码public class TestAtomicInteger { static int i = 0 ; //error! public static void main(String[] args) throws Exception{ Thread[] ts = new Thread[10]; for(int k = 0 ; k<ts.length ; k++){ ts[k] = new Thread(new Runna原创 2020-08-06 11:52:35 · 1248 阅读 · 0 评论 -
线程安全的集合接口和类的总结
集合的整理Collection |- List (ArrayList LinkedList Vector CopyOnWriteArrayList) |- Set (HashSet LinkedHashSet CopyOnWriteArraySet) |- SortedSet (TreeSet) |- Queue(LinkedList ConcurrentLinkedQueue) |- BlockingQueue (ArrayBlockingQueue LinkedBlo原创 2020-08-04 17:53:04 · 273 阅读 · 0 评论 -
BlockingQueue 阻塞队列 简单的生产者消费者替换wait和notifyAll的使用
代码public class TestBlockingQueue { public static void main(String[] args) { BlockingQueue<String> queue = new ArrayBlockingQueue<String>(6); Runnable task1 = new Runnable(){ public void run(){ for(int i = 1 ; i<= 100; i++){原创 2020-08-04 17:31:24 · 250 阅读 · 0 评论 -
Thread中sleep() join() yield() Object中wait() notifyAll()区别
吃水不忘挑水人链接1链接2wait() 阻塞线程 释放锁标记notify()/notifyAll() 释放线程,不会释放锁标记Object wait()t1: o.wait() 必须放在对o加锁的同步代码块中。(t1对o调用wait()方法)会有两种结果1.t1会释放其拥有的所有锁标记2.同时t1会阻塞在o的等待队列中t2: o.notify()/notifyAll() 必须放在对o加锁的同步代码块中,从o的等待队列中释放一个/全部线程(t2.对o调用notify()或者是notif原创 2020-08-04 14:33:45 · 141 阅读 · 0 评论 -
读写锁以及线程安全的集合
读写锁实现代码 读写锁实现线程安全的list//读写锁实现class MyList extends ArrayList{ ReadWriteLock rwl = new ReentrantReadWriteLock(); //读写锁 读的时候不能写,写的时候不能读 Lock rl = rwl.readLock(); //读锁 互斥锁,分配一次 //读锁写锁是一对的(假设没线程调用写锁的情况下,读锁的钥匙不是一把。读锁可以被反复分配,是一把共享锁) Lock wl = rwl.writeLo原创 2020-08-04 11:50:18 · 569 阅读 · 0 评论 -
创建线程安全的集合
创建线程安全的集合简单方式public class TestThreadSafe { //创建线程安全的集合 //(synchronizedSet方法由线程不安全的集合转换成线程安全的集合) public static void main(String[] args) { Set<String> s1 = new HashSet<String>(); Set<String> s2 = Collections.synchronizedSet(s1);原创 2020-08-03 17:54:08 · 400 阅读 · 0 评论 -
Lock对象和synchronized关键字的区别
public class TestLock { public static void main(String[] args) throws Exception { MyList2 list = new MyList2(); Thread t1 = new Thread(new Runnable(){ public void run(){ list.add("C"); } }); Thread t2 = new Thread(new Runnable(){ pub原创 2020-08-03 14:21:17 · 271 阅读 · 0 评论 -
Callable接口中的call方法及返回对象Future 和CountDownLatch计数器的使用
jdk1.5中的实现Callable接口中实现call方法创建线程与之前Thread类中或Runnable接口中的重写/实现run方法的不同首选call方法最大不同就是增加了抛出异常及其返回值的功能。Callable接口与Future, 多线程并发情况下利用Future对象接收返回值,上代码。import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concur原创 2020-08-03 11:30:19 · 1644 阅读 · 1 评论 -
使用线程池的方式运行线程 线程池的创建和线程的运行
代码:public class TestExecutor { public static void main(String[] args) { //ExecutorService es = Executors.newFixedThreadPool(2); //并发两个线程正在执行 ExecutorService es = Executors.newCachedThreadPool(); //开多少个线程 保留多少个线程 即有多少个线程正在运行 Runnable r1 = new原创 2020-08-03 10:21:04 · 421 阅读 · 0 评论 -
wait notify线程间的通信机制 应用在生产者消费者的典型问题上以及jdk5.0中synchronized不用的情况下使用Lock对象
public class TestProducerConsumer { public static void main(String[] args) { MyStack stack = new MyStack(); Runnable task1 = new Runnable(){ public void run(){ for(char c = 'A' ; c<='Z' ; c++){原创 2020-07-31 11:30:51 · 183 阅读 · 0 评论 -
Object类中 notify wait方法的使用
public class TestWaitNotify { public static void main(String[] args) throws Exception{ Object o = new Object(); Thread t = new Thread(new Runnable(){ public void run(){ synchronized (o) { System.out.println("A"); System.out.printl原创 2020-07-30 16:24:02 · 120 阅读 · 0 评论 -
Thread类中的基本方法 sleep join currentThread yield setDaemon setPriority
public class Test { public static void main(String[] args) { Thread t1 = new Thread(new TaskA()); Thread t2 = new TaskB(); t1.start(); t2.setDaemon(true); //调用了setDaemon()方法 不需要调用join()方法 t2.start();原创 2020-07-30 14:55:35 · 191 阅读 · 0 评论 -
多线程学习 等待队列状态 死锁问题及其解决办法 五
java代码package com.baigu.demo1;public class TestWaitNotify { public static void main(String[] args) throws Exception{ Object o = new Object(); SubThread t = new SubThread(o); t.start(); synchronized (o){ //wait方法需要放原创 2020-07-29 17:22:42 · 434 阅读 · 0 评论 -
多线程学习 synchronized加锁 保持数据一致 四
synchronized 修饰代码块 对象锁标记 上代码package com.baigu.demo1.stack;public class TestStack { public static void main(String[] args) throws InterruptedException { Stack stack = new Stack();// stack.print();// stack.posh('C');//原创 2020-07-29 11:48:21 · 480 阅读 · 0 评论 -
学习多线程 造成线程不同步的原因 数组实现简单的栈 三
java代码package com.baigu.demo1.stack;public class TestStack { public static void main(String[] args) throws InterruptedException { Stack stack = new Stack();// stack.print();// stack.posh('C');// stack.print();//原创 2020-07-28 10:50:41 · 459 阅读 · 0 评论 -
多线程学习 多线程的五种状态 二
多线程的五种状态初始状态 ==》 创建线程对象可运行状态 ==》 调用start方法运行状态 ==》 os分配cpu时间片终止状态 ==》 run方法退出阻塞状态 ==》 1.等待数据输入(1.用户输入2.接收网上数据3.接收文件中数据 等等) 2.sleep方法 3.join方法线程的四种状态 ==>五种状态初始状态 线程对象创建好,还没有调用start方法。可运行状态(万事俱备,只欠cpu) 调用star.原创 2020-07-27 16:23:17 · 97 阅读 · 0 评论 -
多线程学习 实现多线程的两种方式 一
实现多线程两种方式一 继承Thread类二 实现Runnable接口因为Thread类已经实现了Runnable接口,所以两者本质都是实现Runnable接口,并且实现Runnable接口中的run方法.下面写了一个小例子,直接上代码。public class TestThread { public static void main(String[] args) { /* Thread thread = new Thread(); //创建一个线程对象原创 2020-07-25 23:47:29 · 140 阅读 · 0 评论