多线程基础
文章平均质量分 53
多线程的基础知识
weixin_43979923
一拉瞎一马塞,哟库搜大娃的小黑店
展开
-
多线程基础-synchronized
文章目录一、使用方法二、名词解释1.管程(monitor)2.临界区(cirtical section)三、锁升级概念1.偏向锁(只做标记,把自己的线程id放到markword中)2.轻量级锁(自旋锁)。每个线程在自己线程栈中生成一个LR(Lock Record,锁记录),然后把LR贴到markword中,cas贴上去的标识抢到锁,其他线程继续CAS。3.重量级锁(OS,markword中记录的是objectMonitor)四、用户态和内核态五、和Lock的区别六、乐观锁与悲观锁一、使用方法synchr原创 2022-05-24 21:09:15 · 175 阅读 · 0 评论 -
多线程基础-volatile的作用
一、保证可见性多线程基础-并发编程3大特性-可见性二、禁止指令重排序多线程基础-并发编程3大特性-有序性原创 2022-05-24 20:40:43 · 110 阅读 · 0 评论 -
多线程基础-并发编程3大特性-原子性
一、先看一个程序public class T1 { static int p=0; public static void main(String[] args) throws InterruptedException { CountDownLatch count = new CountDownLatch(3); for(int i=0; i<3; i++) { Thread t = new Thread(()->{原创 2022-05-24 20:35:16 · 85 阅读 · 0 评论 -
多线程基础-并发编程3大特性-有序性
文章目录一、先看一个程序二、指令重排序三、示例代码四、出现有序性问题时如何解决一、先看一个程序public static void main(String[] args) { Object o = new Object();}看他的字节码0 new #2 <java/lang/Object>3 dup // 先忽略4 invokespecial #1 <java/lang/Object.<init> : ()V>7 astore_18 retu原创 2022-05-24 10:58:43 · 160 阅读 · 0 评论 -
多线程基础-并发编程3大特性-可见性
文章目录一、先看一个程序二、问题产生的原因三、解决的办法四、volatile原理五、三级缓存六、缓存行概念一、先看一个程序public class VisibilityDemo { static boolean check = false; public static void main(String[] args) throws InterruptedException { new Thread(()->{ while(!check) {原创 2022-05-24 09:50:21 · 66 阅读 · 0 评论 -
多线程基础-如何结束一个线程
文章目录一、stop() --不推荐二、suspend() 和 resume() --不推荐三、interrupt() --推荐四、volatile变量控制 --推荐一、stop() --不推荐示例代码:public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { while (true) {原创 2022-05-23 23:33:24 · 293 阅读 · 0 评论 -
多线程基础-关于打断方法
文章目录一、打断的三个方法二、代码示例三、什么方法被打断会抛出InterruptedException四、能否打断BLOCK状态五、能否打断Lock.lock()一、打断的三个方法boolean isInterrupted();获取线程是否被打断void interrupt();打断线程static boolean interrupted();获取线程是否被打断,如果被打断,复位。二、代码示例1.3个方法使用示例:public static void main(S原创 2022-05-23 23:14:59 · 419 阅读 · 0 评论 -
多线程基础-线程状态
一、线程状态一、线程状态1.NEW2.RUNNABLE(READY/RUNNING)3.WAITING4.TIMED WAITING5.BLOCKED6.TERMINATED关系图:二、代码演示状态public class StateDemo { public static void main(String[] args) { Thread t1 = new Thread(() -> { while(true) { .原创 2022-05-23 22:47:31 · 77 阅读 · 0 评论 -
多线程基础-创建线程的5种方法
一.继承Thread类二.实现runnable接口三.lambda表达式四.线程池五.callable与future1.线程池启动2.用Thread包装启动一.继承Thread类public class ThreadDemo extends Thread{ @Override public void run() { System.out.println("启用多线程。。。"); } public static void main(St.原创 2022-05-23 21:32:46 · 59 阅读 · 0 评论 -
多线程基础-why为什么使用多线程,what什么是线程,通俗回答
一、为什么使用多线程?二、什么是线程?什么是程序?什么是进程?什么是线程?什么是纤程?三、多线程相关问题什么是线程的切换单核CPU设定多线程是否有意义线程是不是越大越好那么线程数设多少最合适一、为什么使用多线程?生活中的场景:cpu比作理发师,顾客比作线程。理发师在对顾客A烫发,染发时需要等待一定时间(比如染发需要等10分钟燃料着色),这些空余时间可以对顾客B也进行烫发和染发操作。使用多线程意义就是对CPU资源的压榨,使cpu利用率更高(理发师:!@#&¥)二、什么是线程?什么.原创 2022-05-23 17:13:36 · 104 阅读 · 0 评论