多线程
王h_h
这个作者很懒,什么都没留下…
展开
-
在Test中使用多线程要注意的事情
当主线程结束的时候其他线程也会结束原创 2020-09-25 14:36:59 · 313 阅读 · 0 评论 -
JUC --- ThreadPool线程池api及工作原理简析
为什么使用线程池:对于ThreadPool,我们可以理解为已经为我们创建了一堆线程,然后再让这些线程去做我们指定的事情。首先先看看继承图:Executors创建线程的三种方法:ExecutorService threadPool = Executors.newFixedThreadPool(5); //固定容量ExecutorService threadPool = Executors.newSingleThreadExecutor(); //单例的、单个线程的线程池ExecutorS原创 2020-08-04 17:29:20 · 208 阅读 · 0 评论 -
JUC --- BlockingQueue 阻塞队列
BlockingQueue(阻塞队列)是什么?当队列为空时,从队列中获取元素将阻塞。当队列为满时,从队列中添加元素将阻塞。因为是队列,所以我们理应想到先进先出。接下来我们来演示简单的使用一下:add(抛出异常):/** * @author Cocowwy * @create 2020-05-05-14:53 */public class BlockingQueueDemo { public static void main(String[] args) { Bloc原创 2020-08-04 15:25:19 · 167 阅读 · 0 评论 -
JUC --- ReadWriteLock(读写锁)
多个线程同时读一个资源类没有任何问题,所以为了满足并发量,读取共享资源应该可以同时进行。 但是,如果有一个线程想去写共享资源类,就不应该再有其他线程可以对该资源进行读或写。接下来先看个案例:代码如下:public class ReadWriteLockDemo { public static void main(String[] args) { MyCache myCache = new MyCache(); for (int i = 0; i <原创 2020-08-04 14:45:25 · 153 阅读 · 0 评论 -
JUC -- 辅助类
要求:当所有人离开教室之后班长 main线程关门public class CountDownLatchDemo { public static void main(String[] args) { for (int i = 1; i <= 6; i++) { new Thread(() -> { System.out.println(Thread.currentThread().getName() + "\原创 2020-08-04 14:29:14 · 144 阅读 · 0 评论 -
JUC ---callable接口
我们自然知道创建线程的三种方式,前两种就不多说了,这次我们讲的是第三种Callable接口。首先,先对比一下Runnable接口和Callable接口的区别://Runnable接口class MyThreadRunnable implements Runnable { @Override public void run() { }}//Callableclass MyThreadCallable implements Callable<Int原创 2020-08-04 13:49:39 · 193 阅读 · 0 评论 -
JUC --- 集合
首先是我们的ArrayList:这次我们讲解的是集合的不安全,首先我们都知道ArrayList吧!首先我们拓展几个知识点,ArrayList底层是Object类型的数组,初始容量是10(jdk7之前,jdk8之后是空引用,到add之后会变成10,类似于懒加载的机制),其扩容的方式是每次扩容为之前的一半,比如10会扩容成15,15扩容成22,扩容用到的方法时Arrays的copyof方法,OK,接下来后进入主题。先看这段代码:List<String> list=new ArrayLi原创 2020-08-04 12:32:39 · 325 阅读 · 0 评论 -
JUC --- 8锁问题
先了解一个概念:synchronized 锁的是这个方法所在的资源类,就是这个对象,也就是同一时间段不可能有两个线程同时进到这个资源类,同一时间段,只允许有一个线程访问资源类里面的其中一个synchronized 方法!T1:1.标准访问,请问先打印邮件还是短信?代码如下:public class Lock8 { public static void main(String[] args) { Phone phone = new Phone(); new Th原创 2020-08-04 12:19:40 · 125 阅读 · 0 评论 -
JUC --- 生产者与消费者
这次我们讲解的是一个例题:题目:两个线程操作一个变量,实现两个线程对同一个资源一个进行加1操作,另外一个进行减1操作,且需要交替实现,变量的初始值为0。即两个线程对同一个资源进行加一减一交替操作。首先我们先定义操作的资源,并且定义方法。//资源类class Resource { private int number = 0; public synchronized void up() throws InterruptedException { //1.判断原创 2020-08-04 12:14:55 · 194 阅读 · 0 评论 -
线程通信--生产者消费者模式
管程法public class PCTest { public static void main(String[] args) { //建立一个容器 SynContainer synContainer = new SynContainer(); new Producer(synContainer).start(); new Consumer(synContainer).start(); }}//生产者只负...原创 2020-07-25 19:25:35 · 271 阅读 · 0 评论 -
死锁
两个线程互相同时持有对方所需要的锁package com.itheima.demo11;import java.util.concurrent.TimeUnit;/** * @author name * @date 2020/7/24 */public class DeadLock { public static void main(String[] args) { Makeup g1 = new Makeup(0,"灰姑娘"); Makeup原创 2020-07-24 17:12:50 · 81 阅读 · 0 评论 -
多线程-创建线程的四种方式-初识多线程
多线程进程:进程是资源分配的最小单位,运行的程序就是进程:qq.exe线程:线程是程序执行的最小单位,也就是cpu调度执行的最小单位,程序中含有多个线程:聊天,视频真正的多线程应该是多核cpu,单核cpu其实只是在线程间连续切换多核cpu才可以做到并行线程的创建(四种方式)第一种 继承Thread类package com.itheima.my;import java.util.concurrent.TimeUnit;//继承Thread类 重写 run 方法原创 2020-07-21 15:38:55 · 174 阅读 · 0 评论 -
多线程(二)线程的状态
原创 2020-07-22 14:56:18 · 78 阅读 · 0 评论 -
多线程(三)---线程的方法
sleep 方法public class Demo01Sleep { public static void main(String[] args) { //模拟秒表 for (int i = 1; i <=60 ; i++) { System.out.println(i); //使用Thread类的sleep方法让程序睡眠1秒钟 try { Threa原创 2020-07-22 15:10:39 · 192 阅读 · 0 评论 -
多线程synchoroize修饰不同位置的区别
synchoroize修饰静态方法和修饰class效果是一样的,因为静态方法属于类,不属于对象synchoroize成员方法和修饰对象效果是一样的,因为成员方法属于对象类锁和对象锁是两种,不会发生线程同步因为同步需要耗费很多的资源,所以使用同步代码块修饰可能发生线程安全的代码比直接修饰方法要节省资源...原创 2020-07-22 17:09:28 · 105 阅读 · 0 评论 -
多线程(四)--线程不安全案例与解决方案,原子操作
案例一:抢票问题public class ThreadTicket { public static void main(String[] args) { BuyTicket buyTicket = new BuyTicket(); new Thread(buyTicket, "线程一").start(); new Thread(buyTicket, "线程二").start(); new Thread(buyTicket, "线原创 2020-07-23 22:15:18 · 231 阅读 · 0 评论 -
多线程(五)--lock锁
/* 模拟卖票案例 创建3个线程,同时开启,对共享的票进行出售 */public class Demo01Ticket { public static void main(String[] args) { //创建Runnable接口的实现类对象 RunnableImpl run = new RunnableImpl(); //创建Thread类对象,构造方法中传递Runnable接口的实现类对象 Thread t.原创 2020-07-25 15:09:02 · 267 阅读 · 0 评论