随笔分类 -  java 多线程

摘要:Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方 阅读全文
posted @ 2018-03-08 17:33 jason.bai 阅读(3549) 评论(0) 推荐(1) 编辑
摘要:守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出) 所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出 阅读全文
posted @ 2018-01-15 18:01 jason.bai 阅读(19719) 评论(0) 推荐(2) 编辑
摘要:ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 ThreadLocal 内存泄漏的问题 ThreadLo 阅读全文
posted @ 2017-10-30 10:52 jason.bai 阅读(597) 评论(0) 推荐(0) 编辑
摘要:Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现 阅读全文
posted @ 2017-10-20 15:37 jason.bai 阅读(422) 评论(0) 推荐(0) 编辑
摘要:正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。 本文涉及到的知识点:thread.join(), object.wait(), object.notify(), CountdownLatch, CyclicBarr 阅读全文
posted @ 2017-10-10 16:58 jason.bai 阅读(534) 评论(0) 推荐(2) 编辑
摘要:1. java.util.concurrent – Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包。这个包包含有一系列能够让 Java 的并发编程变得更加简单轻松的类。在这个包被添加以前,你需要自己去动手实现自己的相关工具类。 本 阅读全文
posted @ 2017-09-04 17:19 jason.bai 阅读(352) 评论(0) 推荐(0) 编辑
摘要:ReenTrantLock可重入锁(和synchronized的区别)总结 可重入性: 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的 阅读全文
posted @ 2017-07-20 16:13 jason.bai 阅读(29535) 评论(0) 推荐(10) 编辑
摘要:1. 用什么关键字修饰同步方法 ? 用synchronized关键字修饰同步方法 2. 同步有几种实现方法,都是什么?分别是synchronized,wait与notify wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个 阅读全文
posted @ 2017-06-16 09:45 jason.bai 阅读(4591) 评论(0) 推荐(0) 编辑
摘要:三者的主要区别和关系如下: Executor 和 ExecutorService 这两个接口主要的区别是:ExecutorService 接口继承了 Executor 接口,是 Executor 的子接口 Executor 和 ExecutorService 第二个区别是:Executor 接口定义 阅读全文
posted @ 2017-06-06 15:32 jason.bai 阅读(299) 评论(0) 推荐(0) 编辑
摘要:所谓互斥,就是不同线程通过竞争进入临界区(共享的数据和硬件资源),为了防止访问冲突,在有限的时间内只允许其中之一独占性的使用共享资源。如不允许同时写 同步关系则是多个线程彼此合作,通过一定的逻辑关系来共同完成一个任务。一般来说,同步关系中往往包含互斥,同时对临界区的资源会按照某种逻辑顺序进行访问。如 阅读全文
posted @ 2017-05-12 10:32 jason.bai 阅读(8767) 评论(2) 推荐(3) 编辑
摘要:Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition1的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使 阅读全文
posted @ 2017-05-09 14:07 jason.bai 阅读(3475) 评论(0) 推荐(0) 编辑
摘要:多线程 [html] view plain copy print? final void wait() throws InterruptedException final void notify() final void notifyAll() [html] view plain copy prin 阅读全文
posted @ 2017-03-29 18:02 jason.bai 阅读(565) 评论(0) 推荐(0) 编辑
摘要:import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 ... 阅读全文
posted @ 2017-02-22 14:30 jason.bai 阅读(6895) 评论(0) 推荐(0) 编辑
摘要:综上例子可以看到: Callable 和 Future接口的区别 阅读全文
posted @ 2017-02-21 17:25 jason.bai 阅读(58124) 评论(1) 推荐(4) 编辑
摘要:Java并发编程:Lock 今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章。 在上一篇 阅读全文
posted @ 2017-02-20 14:10 jason.bai 阅读(73553) 评论(10) 推荐(37) 编辑
摘要:有时候会有这样的需求,多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工作结束后,才能开始。举个例子,开启多个线程分块下载一个大文件,每个线程只下载固定的一截,最后由另外一个线程来拼接所有的分段,那么这时候我们可以考虑使用CountDownLatch来控制并发。 Count 阅读全文
posted @ 2017-01-04 11:07 jason.bai 阅读(544) 评论(0) 推荐(0) 编辑
摘要:题目:现在两个线程,可以操作同一个变量,实现一个线程对该变量加1,一个线程对该变量减1,实现交替,来10轮,变量初始值为零。 在这个需要注意一个问题在共享对象的方法里 将if替换为while,解决虚假唤醒的问题。 阅读全文
posted @ 2017-01-03 18:32 jason.bai 阅读(261) 评论(0) 推荐(0) 编辑
摘要:早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本, 阅读全文
posted @ 2016-11-22 10:10 jason.bai 阅读(3525) 评论(0) 推荐(0) 编辑
摘要:Subsections 线程安全(Thread safety)锁(lock)共享对象对象组合基础构建模块任务执行取消和关闭线程池的使用性能与可伸缩性并发程序的测试显示锁原子变量和非阻塞同步机制 一、线程安全(Thread safety) 无论何时,只要多于一个线程访问给定的状态变量。而且其中某个线程 阅读全文
posted @ 2016-11-21 13:50 jason.bai 阅读(661) 评论(0) 推荐(0) 编辑
摘要:1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 然而在实际开 阅读全文
posted @ 2016-09-21 11:23 jason.bai 阅读(2098) 评论(0) 推荐(0) 编辑