![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程编程
袁小黑
这个作者很懒,什么都没留下…
展开
-
总结每天之上下文切换
16、什么是上下文切换 答: 比如人工作的时候,准备好装备好工作需要的工具才能开始正常工作,否则都是工作的准备阶段。而我们的cpu是分片执行的(因为CPU运行速度太快,不想浪费,所以都是分片运行任务),我们一般的操作系统都是多任务系统,需要执行其它任务,那么就需要把当前任务的工作环境也就是运行环境保存到内存里,然后把下一个任务的工作环境/运行环境(其实就是寄存器、程序计数器那些东西就绪)放入CPU中,然后开始执行。 这两个任务运行环境切换称为上下文切换。 17、上下文切换的过程 答: 1)挂起一个进程,将这原创 2020-11-05 10:49:16 · 611 阅读 · 0 评论 -
Java后台线程/守护线程/服务线程
Thread.setDaemon(true)开启守护线程,守护线程就是在后台运行的线程,它会随着父线程结束而结束。 Daemon 线程中产生的新线程也是 Daemon 的。当 JVM 中所有的线程都是守护线程的时候, JVM 就可以退出了;如果还有一个或以上的非守护线程则 JVM 不会退出。 可以看下面的代码: public class DaemonThreadTest { public static void main(String[] args) { new Thread(()-原创 2020-11-04 17:24:09 · 359 阅读 · 0 评论 -
有三个线程怎么保证顺序性
保证顺序性其实就是java多线程通信的问题。三个线程协定执行的先后顺序,转换成线程通信的问题,我需要用一个东西来协定执行到哪个线程了,这东西实现方式就有很多了: Java的线程通信都是使用内存共享变量的方式,那么就简单的方式就是: 一个共享变量。这个共享变量可以是一个简单的静态变量,可以是一个Semaphore等。 其实如果考虑抢锁会消耗性能,如果我不跑的线程进行挂起呢? 实现方式2 2)线程的wait和notify 如果对底层了解一点,我个人理解性能最高的方式其实是直接使用LockSupport.pa原创 2020-11-04 16:07:54 · 914 阅读 · 0 评论 -
因为多线程,我怼了一个同事
背景: 今天同事在看我写锁同步的总结,兴致来了想考考我,问我synchronized 保证变量的可见性吗? 我回答可以,他的答案是synchronized不保证可见性,volatile才保证可见性。结果两人起来争执,为此他特意写了如下代码来证明他说的是正确的: 重点戏 /** * 证明,synchronized能不能保重对象可见性。 */ public class SynchronizedLock { private static int count = 0; public void原创 2020-11-04 15:26:25 · 1365 阅读 · 14 评论 -
总结每天10问之java多线程1
Java 多线程 1、Java中实现多线程有多少种方式: 答: 继承Thread; 2)实现接口Runnable; 3)FutureTask 4)线程池 2、sleep()和wait() 有什么区别? 答: sleep不会释放对象锁,wait会释放对象锁。 sleep会自我唤醒,wait需要notify/notifyAll。 3、volatile是什么?可以保存有序性吗? 答: volatile是Java多线程解决可见性的问题提供的一个保留关键字,使用它可以保证多线程访问时该变量的可见性。可以保证部分有原创 2020-11-04 14:36:03 · 137 阅读 · 0 评论