
java线程
坤仔~
3年咖啡开发者,目前就职于某世界500强房地产公司
展开
-
死锁例子
DeadLock//DeadLockpublic class Test{ public static void main(String[] args){ Service service=new Service(); ThreadA threadA=new ThreadA(service); ThreadB threadB=new Thre...原创 2018-09-29 17:19:42 · 251 阅读 · 0 评论 -
原子性,有序性,可见性
原子性,有序性,可见性synchronized 具有原子性,有序性,可见性;volatile 具有有序性,可见性原子性原子性是指在一个操作过程中,要不就全部执行成功,要不就全部执行失败。即使在多个线程一起执行的时候,只要操作开始,就不会被其他线程干扰。最常见的例子:i++i++ 并不是原子操作,因为i++ 实际上包含了3个操作,1. 读取变量i的值;2:对i进行加一的操作;3.将计算后...原创 2018-10-24 11:12:18 · 229 阅读 · 0 评论 -
(wait notifyAll)多生产多消费
(wait notifyAll)多生产多消费先生产后消费 public class Test {public static void main(String[] args) throws InterruptedException { MyStack myStack=new MyStack(); P1 p1=new P1(myStack); P1 p2=new P...原创 2018-10-24 11:11:00 · 117 阅读 · 0 评论 -
sleep,join,interrupt,yield
sleep,join,interrupt,yieldsleepThread类的一个静态方法,作用是让当前线程阻塞一定时间(以毫秒为单位),假如有锁的话,sleep是不释放锁的(wait,join释放锁)。源码: public static native void sleep(long millis) throws InterruptedException;例子: publ...原创 2018-10-24 11:10:26 · 218 阅读 · 0 评论 -
ThreadLocal
ThreadLocal变量值的共享可以使用public static变量的形式,所有线程都使用同一个public static变量。假如想每个线程都有自己的共享变量,那么就使用ThreadLocal,ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有数据。如下面例子,可以直接copy去执行/** *...原创 2018-10-25 22:29:35 · 128 阅读 · 0 评论 -
守护线程
守护线程java线程分为两种:守护线程和用户线程守护线程:是指在程序运行的时候在后台提供一种通用服务的线程,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程(例如:垃圾回收线程)。PS:只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没啥本质的区别:唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了...原创 2018-10-25 22:29:09 · 157 阅读 · 0 评论 -
一生产一消费
一生产一消费例子: /** * 一生产一消费 */ public class Run { public static void main(String[] args) { String lock=""; P p=new P(lock); C c=new C(lock); ...原创 2018-10-23 11:24:28 · 126 阅读 · 0 评论 -
一生产多消费
一生产多消费例子: /** * 一生产多消费 */ public class Run2 { public static void main(String[] args) { MyStack myStack=new MyStack(); P1 p1=new P1(myStack); ...原创 2018-10-23 11:23:56 · 155 阅读 · 0 评论 -
Timer
TimerTimer类主要负责计划任务的功能,也就是在指定的时间开始某一个任务。Timer类主要作用就是设置计划任务,但封装任务的类确实TimerTask类。(TimerTask是一个抽象类,所以执行计划任务的代码要放进去TimerTask的子类中)schedule(TimerTask task,Date time)该方法的作用是在指定的日期执行一次某一任务。执行任务的时间晚于当前时间:...原创 2018-10-28 20:00:15 · 145 阅读 · 0 评论 -
ReentrantReadWriteLock
ReentrantReadWriteLockReentrantLock具有互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。(这种做法虽然保证了变量的线程安全性,但效率非常低下)ReentrantReadWriteLock也叫读写锁,一个是读操作相关的锁,也称为共享锁;另一个是写操作相关的锁,也叫排他锁。(多个读锁之间不互斥,读锁与写锁互斥,写...原创 2018-10-28 19:59:46 · 127 阅读 · 0 评论 -
ReentrantLock
ReentrantLock在JDK5.0版本之前,重入锁的性能远远好于synchronized关键字,JDK6.0版本之后synchronized 得到了大量的优化,二者性能也不分伯仲,但是重入锁是可以完全替代synchronized关键字的。ReentrantLock在扩展功能上更加强大,比如具有嗅探锁定、多路分支通知等,并且在使用上也比synchronized灵活(另外可以结合Co...原创 2018-10-28 19:59:16 · 151 阅读 · 0 评论 -
可重入锁
可重入锁什么是可重入锁在我刚刚接触的时候,很多书上,博客上都会看到可重入锁这个东东,恕小弟愚昧,一开始对着可重入锁并不知道到底是什么,然后就查查资料,查漏补缺。可重入锁:可重复可递归调用的锁。(ps:也就是说在外层使用锁之后,在内层也可以使用外层的锁,并且不会发生死锁)ReentrantLock和synchronized都是可重入锁重入锁例子:methodA首先拿到Test的锁,再执行me...原创 2018-10-28 19:58:29 · 517 阅读 · 0 评论 -
单核多线程与多核多线程
单核多线程与多核多线程或许有些同学对于单核多线程和多核多线程有点误区,因为会听到一些同学问为什么单核能处理多线程,总结了一些干货,下面会通俗说明下。线程和进程是什么线程是CPU调度和分配的基本单位(可以理解为CPU只能看到线程)进程是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位单核多线程单核多线程指的是单核CPU轮流执行多个线程,通过给每个线程分配CPU时间片来实...原创 2018-09-29 17:20:33 · 17387 阅读 · 11 评论 -
CountDownLatch
CountDownLatch最近在看zookeeper的时候看到了zookeeper在连接实例化的时候需要等zookeeper准备就绪后再继续执行(实现方式是使用CountDownLatch,因此对CountDownLatch总结一下)。//zookeeper connectpublic class ConnectionWatch implements Watcher { priva...原创 2019-02-01 11:31:16 · 275 阅读 · 0 评论