![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
基本线程和concurrent包下的api使用
甜美河边的钓鱼人
田美村左岸的钓鱼人
展开
-
CountDownLatch Semaphore CyclicBarrier的使用
CountDownLatch相当于倒计时,就是设置一定的线程数,当达到指定的线程数的时候,就会冲破countDownLatch.await();方法,如果没有达到指定的线程数,那么就会在countDownLatch.await();该方法上阻塞直到达到要求位置: public static void main(String[] args) { // 三个约定出去玩 CountDownLatch countDownLatch = new CountDownLatch(3);原创 2020-07-12 18:20:00 · 149 阅读 · 0 评论 -
Callable的使用和自定义自己的Callable接口
Callable对比Runnale接口来说,可以返回线程执行的结果: public static void main(String[] args) throws Exception { FutureTask future = new FutureTask(() -> { TimeUnit.SECONDS.sleep(10); return "hello"; }); new Thread(future原创 2020-07-12 17:56:58 · 565 阅读 · 0 评论 -
CopyOnWrite技术
copyOnWrite技术的思路是通过写时复制的方式来来解决并发的问题,采用一种读写分离的思想,这样在读的时候,可以并发读,提高效率。具体的方式,是并发读,然后写入前,先复制一份,然后在复制的那一份数据中,写入需要的数据,然后替换掉原来的引用,那么就写成功了。需要注意的是,copyOnWrite只能保证最终一致性,不能实时更新。 在介绍copyOnwrite技术前,先看下多线程集合的情况: 1.1、ArrayList的测试 public static void main(String[] args)原创 2020-07-12 17:47:09 · 328 阅读 · 0 评论 -
线程8锁问题
package cn.yishijie; import java.util.concurrent.TimeUnit; public class EightLockQuestion { public static void main(String[] args) throws Exception{ //question01();// 结果:AAA BBB ...原创 2020-05-02 17:24:24 · 137 阅读 · 0 评论 -
三个线程交替打印ABC10次
三个线程交替打印ABC,用到线程的通知机制:用一个共享变量来表示当前需要打印的线程 index 0打印A,然后将index修改为1,然后打印B,将index修改为2,打印C,然后将index修改为0 判断等待,业务处理(就是打印和修改index),唤醒等待 package cn.yishijie; /** * 交替打印AB 10次 */ public class ThreadNoti...原创 2020-05-01 23:19:56 · 476 阅读 · 0 评论 -
线程模拟卖车票
1、通过继承的方式: package com.company; /** * @author jeffchan 2020/04/14 */ public class Ticket extends Thread { // 卖的窗口号 private String name; // 卖一百张票 private static int tickets = 100;...原创 2020-05-01 11:09:35 · 178 阅读 · 0 评论 -
创建线程的方式
1、直接继承Thread这个类,然后重写run方法 /** * @author jeffchan 2020/04/14 */ public class MyFirstThread extends Thread { @Override public void run() { for (int i =0; i < 100;i++){ ...原创 2020-04-14 21:20:49 · 124 阅读 · 0 评论