
juc
qq_43193797
github:https://github.com/yanjie666
展开
-
多线程买票程序sync实现
买票问题,100个小朋友同时买票资源类public class MyTicket { public static int num = 100; public void sale(){ num --; System.out.println(Thread.currentThread().getName()+"小朋友买了一张票,剩余票数"+num); }}买票程序...原创 2019-04-05 15:49:27 · 236 阅读 · 0 评论 -
什么是线程池?线程池的工作原理和使用线程池的好处?
一个线程池管理了一组工作线程,同时它还包括了一个用于放置等待执行 任务的任务队列(阻塞队列)。默认情况下,在创建了线程池后,线程池中的线程数为 0。当任务提交给线程池之后的处理策略如下:1. 如果此时线程池中的数量小于 corePoolSize(核心池的大小),即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务(也 就是每来一个任务,就要创建一个线程来执行任务)。2....原创 2019-04-08 15:16:29 · 696 阅读 · 0 评论 -
Java 中的活锁,死锁,饥饿有什么区别?
死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一 种互相等待的现象,若无外力作用,它们都将无法推进下去,此时称系统处于 死锁状态或系统产生了死锁。饥饿:考虑一台打印机分配的例子,当有多个进程需要打印文件时,系统 按照短文件优先的策略排序,该策略具有平均等待时间短的优点,似乎非常合 理,但当短文件打印任务源源不断时,长文件的打印任务将被无限期地推迟, 导致饥饿以至饿 死。活锁...原创 2019-04-08 10:22:33 · 1739 阅读 · 0 评论 -
Java 中堆和栈有什么不同?
栈是一块和线程紧密相关的内存区域。每个线程都有自己的栈内存,用于 存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可 见的。而堆是所有线程共享的一片公用内存区域。对象都在堆里创建,为了提升效率线程会从堆中弄一个缓存到自己的栈,如果多个线程使用该变量就可能 引发问题,这时 volatile 变量就可以发挥作用了,它要求线程从主存中读取变 量的值。...原创 2019-04-08 09:38:24 · 403 阅读 · 0 评论 -
Juc工具类Semaphore
/**** @Description: TODO(这里用一句话描述这个类的作用) ** 在信号量上我们定义两种操作:* acquire(获取) 当一个线程调用acquire操作时,它要么通过成功获取信号量(信号量减1),* 要么一直等下去,直到有线程释放信号量,或超时。* release(释放)实际上会将信号量的值加1,然后唤醒等待的线程。...原创 2019-04-05 19:21:32 · 195 阅读 · 0 评论 -
Juc工具类CyclicBarrier
/**** @Description: TODO(这里用一句话描述这个类的作用)** CyclicBarrier 的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是,* 让一组线程到达一个屏障(也可以叫同步点)时被阻塞, 直到最后一个线程到达屏障时,屏障才会开门,所有* ...原创 2019-04-05 19:18:53 · 147 阅读 · 0 评论 -
Juc工具类CountDownLatch闭锁
/**** @Description: *让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。** CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。* 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),* ...原创 2019-04-05 19:14:04 · 168 阅读 · 0 评论 -
Juc工具类ReentrantReadWriteLock
ReentrantReadWriteLock 案例class MyQueue { private Object obj;// 电子屏幕 private ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); /*** * 读取屏幕的操作 */ public voi...原创 2019-04-05 19:07:38 · 96 阅读 · 0 评论 -
多线程实操二:切菜,炒菜,上菜问题
问题描述:有一家餐馆餐馆里有三个厨师一个负责切菜、一个负责炒菜、一个负责端菜三个厨师出10道菜顺序必须是:先切再炒再端这个问题涉及到线程的定制化通讯线程定制化通讯public class Cooking { public String status = "cut"; Lock lock = new ReentrantLock();...原创 2019-04-05 18:18:56 · 550 阅读 · 0 评论 -
多线程问题一:一条线程打印0,一条线程打印1
1 多线程的实现(runnable、callable)2 多线程的同步(锁syn,lock)3 多线程的通讯(wait notify XX)题目:一个线程打印0,另一个线程打印1思路分析:俩条线程互相唤醒,俩条线程不能同时执行,需要sync关键字class Phone { public static synchronized void sendSMS()...原创 2019-04-05 18:05:40 · 242 阅读 · 0 评论 -
Juc入门之Callable接口
1.多线程如何实现2.多线程如何保证安全性/同步3.线程间如何通讯注意:在多线程try catch finally语句中,当try字段中线程处于等待或者睡眠,finally代码块仍然执行。即finally即使是线程等待或者睡眠仍然执行Runnable实现类有一个FutureTaskFurure接口实现线程直接数据的交互(Runnable接口不可以,因为Run...原创 2019-04-05 16:53:58 · 311 阅读 · 0 评论 -
Java 高并发面试题
1、线程与进程 进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(textregion)、数据区域(dataregion)和堆栈(stackregion)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈...原创 2019-04-13 00:43:08 · 781 阅读 · 0 评论