多线程
多线程总结学习
stay hungry,stay you
stay hungry,stay young
展开
-
子线程中获取父线程中的ThreadLocal值(InheritableThreadLocal)
从这里可以看出,在子线程中直接用父线程的ThreadLocal对象获取父线程的ThreadLocal值不可能获取到,所以可以在父线程中利用InheritableThreadLocal赋值,然后在子线程中用父线程的InheritableThreadLocal对象获取父线程的值。ThreadLocal 线程之间是隔绝的,各自的ThreadLocal会给自己建一个副本缓存,只存自己都东西。所以想在一个线程中获取另一个线程的东西必须用InheritableThreadLocal。原创 2024-04-14 10:09:33 · 266 阅读 · 0 评论 -
ThreadLocal多线程之间存取数据互不干扰
原理理解参考ThreadLocal多线程之间互不干扰public class ThreadLocalController { private static ThreadLocal<List<String>> threadLocal = new ThreadLocal<>(); public void setThreadLocal(List<String> value) { threadLocal.set(value);原创 2021-02-24 16:36:19 · 440 阅读 · 0 评论 -
DelayQueue延迟队列
/** * 延迟队列 时间越长最迟从队列中输出 */public class DelayQueueController implements Delayed { //名称 private String name; //时长 private long time; public DelayQueueController(String name, long time, TimeUnit unit) { this.name = name;原创 2021-02-23 17:19:17 · 120 阅读 · 1 评论 -
PriorityBlockingQueue优先级队列
谁级别高谁先输出/** * 优先级队列 */public class PriorityBlockingQueueController { static class Ticket implements Comparable<Ticket> { private int level; public Ticket(int level) { this.level = level; } @Over原创 2021-02-23 17:16:47 · 141 阅读 · 0 评论 -
ConcurrentHashMap的使用和理解
(一) ConcurrentHashMap实现 数据在多线程之间的可见性 //这种类似于volatile 可以实现多线程操作数据时数据在多个线程之间的可见性 static Map<Long, String> conMap = new ConcurrentHashMap<Long, String>(); public static void main (String[]args) throws InterruptedException {原创 2021-02-23 16:32:33 · 1093 阅读 · 3 评论 -
CountDownLatch的使用和理解
@RequestMapping(value = "/getThread", method = RequestMethod.GET) @ResponseBody public String getData(){ CountDownLatch latch = new CountDownLatch(4); new Thread(() -> { try { //第一个线程被阻塞 ...原创 2021-02-20 18:31:33 · 118 阅读 · 0 评论 -
volatile不具有原子性的理解
volatile不具有原子性的理解原创 2020-05-23 12:59:12 · 674 阅读 · 0 评论 -
volatile(二)
(一):as-if-serial as-if-serial语义的意思指: 不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime 和处理器都必须遵守as-if-serial语义。为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种...原创 2019-12-23 11:21:19 · 135 阅读 · 1 评论 -
volatile(一)
(一)volatile的作用 1:volatile的作用是保证共享变量的可见性,不能保证原子性,也不能保证线程安全。 2:volatile的作用是确保所有线程在同一时刻读取到的共享变量的值是一样的。 3:如果某个线程对volatile修饰的共享变量进行更新,那么其他线程可以立刻看到这个更新。...原创 2019-12-20 16:43:37 · 221 阅读 · 0 评论 -
线程组
(一)线程组的概念 把线程归属到一个线程组中,线程组中包括线程和线程组。 线程组的作用: 线程组可以批量管理线程或者组对象,有效的对线程或者组对象进行组织。(二)一级关联 父对象中有子对象,但并不创建孙对象。创建一个线...原创 2019-12-19 17:12:32 · 321 阅读 · 0 评论 -
yield(),join()以及总结sleep,join,yield,wait
(一):yield()(二): join()对于第一点举个栗子:public class SysController { public static void main(String[] args) throws InterruptedException{ Thread thread0 = new Thread(()-> { Syste...原创 2019-12-19 11:42:01 · 108 阅读 · 0 评论 -
sleep(),wait()/notify()
(一):Thread类的sleep()同步方法和同步代码块的区别是什么?1:同步方法默认用this或者当前类class对象作为锁;2:同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,3:我们可以选择只同步会发生同步问题的部分代码而不是整个方法;4:同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(obje...原创 2019-12-18 16:05:02 · 106 阅读 · 0 评论 -
线程的优先级和守护线程
(一)线程的优先级1:在Java中,线程优先级的范围是1~10,默认的优先级是5。2:"高优先级线程"会优先于"低优先级线程"执行。但是如果说谁先完成这个是无法确定的。(二)线程优先级的特性1:继承性:线程A启动线程B,线程A和B具有相同的优先级。Thread.currentThread().getPriority() 可以获取到是线程几执行,返回值是int2:规则性:CPU尽量将执行...原创 2019-12-18 15:26:16 · 241 阅读 · 0 评论 -
安全的终止线程
(一)设置终止标识public class SysController extends Thread{ //volatile 锁 public volatile boolean exit = false; @Override public void run(){ while (!exit){ System.out.p...原创 2019-12-17 17:25:35 · 234 阅读 · 0 评论 -
线程中断
咱们先引入一个面试问题:被中断的线程将立刻退出吗?答:并不能马上退出。 (一):线程中断的概念:1:Java中断是一种协作机制。2:通过中断并不能直接终止线程的运行。3:需要被中断的线程自己处理中断。概念归概念,用一句话来形容:父母叮嘱在外的孩子注意身体,但是否注意身体,怎么注意身体则完全取决于孩子。(你说这完蛋玩意~~~~)(二):具体线程是如何...原创 2019-12-17 11:28:31 · 256 阅读 · 0 评论 -
线程的创建
一:通过Thread类: 继承Thread类的方法创建线程: 1:定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体代表了线程需要完成的任务。 2:创建Thread子类的实例,即创建了对象。 3:调用线程对象的start()方法...原创 2019-12-16 15:53:11 · 96 阅读 · 0 评论 -
进程,线程基础
操作系统发展史:(1) 计算机刚刚诞生的时候:计算机只能接受一些特定的指令,用户输入一个指令,计算机就做一个操作。当用户在思考或者输入数据时,计算机就等待。显然这样效率很低下,因为很多时候,计算机处于等待用户输入的状态。(2)后来批处理擦操作系统诞生:把一系列需要的指令预先写下来,形成一个清单,然后一次性交给计算机,计算机不断的去读取指令来进行相应操作,然后交由计算机去读取并逐个的...原创 2019-12-16 13:08:00 · 86 阅读 · 0 评论