![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
坑铿吭
这个作者很懒,什么都没留下…
展开
-
java创建多线程
java创建多线有两种实现方式:继承Thread类与Runnable接口实现 继承Thread类class Mythread extends Thread{ public void run(){ super.run(); System.out.println("MyThread"); }}public class Main { p...转载 2018-04-03 20:56:25 · 115 阅读 · 0 评论 -
java多线程join方法
// 加锁当前线程对象public final synchronized void join() throws InterruptedException {// 条件不满足,继续等待while (isAlive()) {wait(0);} // 条件符合,方法返回} 当前线程调用join方法,会等待join方法完成才继续下面的程序。原理就是得到了锁,然后调用wait方法,等待唤醒 ...转载 2018-06-30 09:54:55 · 156 阅读 · 0 评论 -
java双重检查锁定
在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化 。这称为延迟初始化或懒加载 看一个不安全的延迟初始化:class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { ...转载 2018-06-18 10:21:16 · 297 阅读 · 0 评论 -
java中的Threadlocal对象
对于java多线程中的共享对象Threadlocal对象,在不同线程取到的值不同,查看源码实现,其实每个value值并不保存Threadlocal对象中,而是保存在每个线程中的定义的Map型变量Threadlocals中,键值是这个共享变量Threadlocal对象,每个线程有相同的Threadlocal对象作为的键,但value是不一样的。 ...转载 2018-06-17 16:07:48 · 226 阅读 · 0 评论 -
java中的final对重排序的限制与逸出
在java中,为了保证final域的正确使用,对重排序进行了一些限制1.在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序2.初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序 有了这个限制,如下A,B线程分别调用writer和reader方法时,可以保证final变量被初始化了 publ...转载 2018-06-17 15:52:34 · 1960 阅读 · 0 评论 -
Volatile
volatile在多线程中有以下特性:可见性:对一个volatile变量的读,总能看见(任意线程)对这个volatle共享变量的最新更新值原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性 对于可见性,不仅对volatile修饰的那一个变量可见,对使用volatile变量的线程里的其他普通变量也可见,所以volatile实现了两个线程...转载 2018-06-17 11:29:23 · 114 阅读 · 0 评论 -
java-synchronized方法
在java中,为了避免多个线程对同一资源访问操作时候的干扰脏读,可以用synchronized来同步方法class MyObject{ public synchronized void methodA(){ try{ System.out.println("begin methodA threadName=" + Thread.currentThread().getName...转载 2018-04-05 18:59:13 · 191 阅读 · 0 评论 -
java多线程——interrupt终止线程
java中有3种方式能终止正在运行的线程:1.run()方法运行完成,线程正常退出。2.使用stop方法强行终止,但此方法已经过期,不推荐使用。3.使用interrupt标记退出。对线程使用interrupt怎么停不下来?class Mythread extends Thread{ public void run(){ for(int i = 0; i < 50000...转载 2018-04-03 20:56:13 · 705 阅读 · 0 评论 -
一切都是对象
Java与C++相比,java是一种更“纯粹”的面向对象的编程语言。 创建一个简单的字符串对象:String s = new String("hello world");s 是对象字符串"hello world"的引用,s是存在虚拟机栈中,而字符串则是保存在公共区域:堆中。永远不需要关心销毁对象 1.变量的作用域的范围由花括号决定public static void main(String[...转载 2018-04-03 20:56:36 · 207 阅读 · 0 评论 -
java中Thread的sleep() 与yield()区别,yield()与join()区别
sleep() 与yield()1.sleep()方法给其他线程运行机会的时候,不考虑线程的优先级,因此当高优先级线程sleep()后,低优先级任务有机会运行;但是yield()只会给同优先级或更高优先级线程运行的机会,甚至可能是自己继续运行2.线程调用sleep()后,转入阻塞状态,而调用yield()后转入了就绪状态。3.sleep方法声明抛出InterruptedExceptio...转载 2018-08-03 10:02:17 · 253 阅读 · 0 评论