多线程
文章平均质量分 79
约翰.史密斯
生活不止有眼前的苟且。
展开
-
java多线程学习
一.实现多线程二.开启多线程启动三.线程停止、中断四.图解线程生命周期五.Thread和Object类中的重要方法详解六. 线程属性七.线程异常处理八.线程使用的利弊并发编程底层原理活跃性问题:死锁、活锁、饥饿...原创 2021-04-09 20:53:13 · 138 阅读 · 0 评论 -
活跃性问题:死锁、活锁、饥饿
什么是死锁1.发生在并发中2.互不相让:当两个(或更多)线程相互持有对方需要的资源,又不主动释放,导致所有线程都无法继续进行,使得两个(或多个)线程陷入无限的阻塞,这就是死锁两个线程造成的死锁public class DeadLock { public static void main(String[] args) throws InterruptedException { new Thread(DeadLock::command).start(); new原创 2021-04-08 17:30:24 · 272 阅读 · 1 评论 -
并发编程底层原理
1.什么是底层原理?从java代码->CPU指令步骤1.编写Java代码,是*.java文件2.通过javac编译后,根据*.java文件生成对应的*.class文件,这个文件里面是字节码.3.JVM根据平台的不同,根据需求将字节码解释为不同的机械指令到不同的CPU上执行.4.机器指令可以直接在CPU上执行,也就是最终的的程序执行结果根据第3点可知,JVM会将相同的字节码,根据平台支持和规范的不同翻译为不同的机器指令,所以如果单单如此,无法保证并发安全的效果一致.解决通过定义一套规原创 2021-04-08 16:28:31 · 255 阅读 · 0 评论 -
八.线程使用的利弊
线程安全什么是线程安全不用考虑这些线程在运行时环境下的调度和交替执行(不用考虑多个线程执行顺序和交替执行的影响)也不需要额外的同步(允许多个线程同时操作某块代码)或者在调用方进行任何其他的协调操作(调用方不用为结果的获取添加额外的协调代码,(例如通过join等待某些线程的执行完成才获取结果)获取的时机并不影响结果)不管业务遇到怎样的多个线程调用某个方法或者读写某个对象的情况,在编写这个业务逻辑时,不需要做额外的处理,程序也不会因为多线程出错,就可以称之为线程安全.线程不安全get的时候同时s原创 2021-04-08 16:19:34 · 300 阅读 · 0 评论 -
七.线程异常处理
UncaughtException主线程可以轻松发现异常,子线程不行由于子线程无法像主线程那样在未捕获异常出现时,终止卡主,轻松排查.同时作为一个兜底的功能,避免不必要的信息提交到前端 public static void main(String[] args) throws InterruptedException { new Thread(()->{ System.out.println(1/0); }).start();原创 2021-04-08 16:12:55 · 304 阅读 · 0 评论 -
六. 线程属性
六. 线程属性线程各属性纵览ID每次程序运行唯一、自增、不可被修改代码 public static void main(String[] args) throws IOException { Thread main = Thread.currentThread(); System.out.println(main.getName() + ">>" + Thread.currentThread().getId()); new Thr原创 2021-04-08 16:11:57 · 95 阅读 · 0 评论 -
五.Thread和Object类中的重要方法详解
1.方法概览2.wait,notify,notifyAll作用、用法注意wait的使用一定要在一个循环中进行,根据条件判断是否继续执行伪唤醒/*A thread can also wake up without being notified, interrupted, or timing out, a so-called spurious wakeup. While this will rarely occur in practice, applications must guard again原创 2021-04-08 16:00:10 · 268 阅读 · 1 评论 -
四.图解线程生命周期
四.图解线程生命周期线程的一生,六个状态(生命周期)public enum State { //新建 NEW, //可运行 RUNNABLE, //阻塞 BLOCKED, //等待 WAITING, //计时等待 TIMED_WAITING, //终止 TERMINATED; }每个状态的含义New已创建,但是还未启动的新线程.也就是已经new出来了,但是还没有调原创 2021-04-08 15:50:06 · 400 阅读 · 0 评论 -
三.线程停止、中断
三线程停止、中断之最佳实践1.停止线程的正确方法(原理)通常线程会在什么情况下停止正常运行的线程只有在两种状况下会停止1.run方法的代码全部执行完毕,正确结束的情况2.出现异常,并且方法没有捕获,这时线程也会停止线程停止之后,它所占有的资源比如说内存等,都会和其他不可达的对象一样被jvm回收通过interrupt来通知,而不是强制停止注意只是通知,如果被通知线程执行的代码没有对这个通知进行处理,没有在被捕获的异常中做相应的退出操作,那么是不会真正退出的,而是直接执行到run方法代码结束为止原创 2021-04-08 15:47:09 · 878 阅读 · 0 评论 -
二.开启多线程启动
二.开启多线程启动的世界1.启动线程的正确和错误方式 public static void main(String[] args) { Runnable run = () -> System.out.println(Thread.currentThread().getName()); run.run(); sout(); Thread thread = new Thread(run); thread.start(原创 2021-04-08 15:35:09 · 177 阅读 · 0 评论 -
一.实现多线程
一.实现多线程的正确姿势1.1实现多线程的方法到底是一种两种还是四种?https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.htmlThere are two ways to create a new thread of execution. One is to declare a class to be a subclass of Thread class PrimeThread extends Thread {原创 2021-04-08 15:33:28 · 144 阅读 · 0 评论 -
错误的双重检查锁
文章目录错误的双重检查锁正确的双重检查锁已经过时的双重检查锁参考文献错误的双重检查锁 public static Test4 test4 = null; public static void main(String[] args) { if (test4 != null) { synchronized (Thread.class) { if (test4 != null) { t原创 2020-12-31 20:36:26 · 278 阅读 · 0 评论