![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
qq_42819022
这个作者很懒,什么都没留下…
展开
-
详解wait/notify机制,看这一篇就够了
文章目录1 wait/notify 机制的原理2 wait() 方法的基本使用2.1 在使用前没有获得锁,抛出异常2.2 在使用前先获得锁,正确调用wait,无异常抛出3 完整实现 wait/notify3.1 创建Service类3.2 创建ThreadA线程类3.3 创建ThreadB线程类3.4 测试与分析1 wait/notify 机制的原理1.1 wait()方法是Object 类的方法,它的作用是使当前执行wait()方法的线程等待,在wait()所在的代码行处暂停执行,并释放锁,直到接到原创 2020-09-27 16:59:57 · 6576 阅读 · 1 评论 -
volatile可见性原理解析
在java中,关键字volatile就像一个神话,几乎在各种博客、微信订阅号、聊天群中反复提起,可见volatile在多线程领域多么重要。所谓可见性,通俗的讲就是B线程能马上看到A线程更改的数据1.1 volatile可见性深度解析cpu运行所需要的数据(读操作)直接来自于内存, 而修改变量值(写操作)实际上有如下三步:1、将主存中的数据加载到缓存中2、CPU对缓存中的数据进行修改3、将修改后的值刷新到内存中1.1可以解决实例变量没有同步更新而造成的死循环举个栗子service类.转载 2020-09-27 12:18:02 · 653 阅读 · 0 评论 -
synchronized任意锁对象的几种用法
1. synchronized(任意对象)1.1 如果多个线程持有“对象监视器”为同一对象,即任意对象是同一个对象,那么这个同步代码块将同步执行1.1.1 Servicepublic class Service { private String userName; private String password; private String aString = new String(); public void setUserInfo(String userName原创 2020-09-26 18:10:21 · 1347 阅读 · 0 评论 -
停止线程的几种简单方法
停止线程最简单的方法是使用stop()方法暴力停止,但是这种方法在java中已经被画横线抛弃,是不再被采用的方法,原因有两,其一是因为stop()方法容易造成业务处理的不确定性,其二是因为stop()释放锁会给数据造成不一致的结果。下面给大家介绍几种通用的正确的停止线程的方法。一、this.interrupt()+this.isInterrupted()+return步骤1,首先在线程停止前使用this.interrupt()加入线程中断标记,this 是需要终止的线程对象,该标记并不会使得线程真正的原创 2020-09-26 15:03:38 · 3025 阅读 · 0 评论 -
多线程之run()和start()比较
在比较线程的run方法和start方法前,我们先来看一下currentThread()方法:public class Test { public static void main(String[] args) throws Exception { System.out.println(Thread.currentThread().getName()); }}currentThread()能返回执行当前代码的线程,下面开始正式进入run和start的比较:一、start()方法原创 2020-09-14 23:03:59 · 311 阅读 · 0 评论 -
创建线程的两种方式
方式一、实现Runnable接口class MyThread implements Runnable{ //成员(资源) public void run(){ //执行的任务 } } Thread thread = new Thread(new MyThread());方式二、继承Thread类Thread类实现了Runnable接口,注意是“实现”,不是“继承”,所以Thread类不是Runnable的子类继承Thread类public class MyThread e原创 2020-09-14 21:37:41 · 314 阅读 · 0 评论