多线程
樊先知樊先知
github:https://github.com/xianzhixianzhixian
展开
-
Java多线程问题--线程对象以构造参数的方式传递给Thread对象进行start()启动时的差异
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git前几天看书,有很多疑惑,于是把自己的感悟记录下来。那么,线程对象以构造参数的方式传递给Thread对象进行start()启动和直接启动时的差异是什么呢?划重点了,先看对比图,第一张是直接启动时的结果,第二张是作为参数时的...原创 2018-11-06 20:03:51 · 1329 阅读 · 0 评论 -
Java多线程问题--方法getHoldCount()、getQueueLength()和getWaitQueueLength()的用法和区别
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git方法getHoldCount()、getQueueLength()和getWaitQueueLength()用法和区别1、lock.getHoldCount()作用是查询当前线程保持锁定的个数,也就是调用lock()...原创 2019-01-17 22:47:45 · 1167 阅读 · 0 评论 -
Java多线程问题--join()的使用以及方法join()后面的代码提前运行的原因
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.gitjoin()方法的使用1、join()方法的用途是使所属的线程对象x正常执行run()方法中的任务,而使当前线程z进行无限期的阻塞,等待线程x销毁后再继续执行线程z后面的代码。2、join()和synchroni...原创 2019-01-08 19:44:49 · 2862 阅读 · 3 评论 -
Java多线程问题--方法hasQueueThread(Thread thread)、hasQueueThreads()和hasWaiters(Condition condition)的用法和区别
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git方法hasQueueThread()、hasQueueThreads()和hasWaiters(Condition condition)的用法和区别1、方法lock.hasQueueThread(Thread thr...原创 2019-01-24 20:37:25 · 746 阅读 · 0 评论 -
Java多线程问题--方法isFair()、isHeldByCurrentThread()和isLocked()的用法和区别
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git方法isFair()、isHeldByCurrentThread()和isLocked()的用法和区别1、lock.isFair()方法用来判断lock锁是公平锁还是非公平锁。公平锁是指,线程获得锁的顺序是按其等待锁...原创 2019-01-24 21:02:33 · 10810 阅读 · 4 评论 -
Java多线程问题--方法lock.lockInterruptibly()、tryLock()和tryLock(long timeout,TimeUint uint)的用法和区别
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git方法lock.lockInterruptibly()、tryLock()和tryLock(long timeout,TimeUint uint)的用法和区别1、lock.lockInterruptibly()的作用是...原创 2019-01-24 21:37:09 · 2328 阅读 · 2 评论 -
Java多线程问题--ThreadLocal和InheritableThreadLocal
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.gitThreadLocal和InheritableThreadLocal基本用法1、ThreadLocal和InheritableThreadLocal都是为了解决每个线程绑定自己的值,其中可以存放每个线程的私有数据,存...原创 2019-01-14 21:32:39 · 273 阅读 · 2 评论 -
Java多线程问题--方法await()和awaitUninterruptibly()的用法和区别
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git方法await()和awaitUninterruptibly()的用法和区别方法condition.awaitUninterruptibly()的使用线程在调用condition.await()后处于await状态...原创 2019-01-24 22:04:27 · 5035 阅读 · 1 评论 -
Java多线程问题--方法awaitUntil(Date deadline)的用法
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git方法awaitUntil(Date deadline)的用法1、方法condition.awaitUntil(Date deadline)的使用:condition.awaitUntil(Date deadline...原创 2019-01-24 22:14:30 · 851 阅读 · 0 评论 -
Java多线程问题--ReentrantReardWriteLock类的用法
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.gitReentrantReardWriteLock类的优势和用法1、ReentrantLock类中提供了lock.lock()和lock.unlock()来实现获得对象锁和释放对象锁。但是我们可以考虑这样一个问题,当多个...原创 2019-01-24 22:36:06 · 180 阅读 · 0 评论 -
Java多线程问题--使用ReentrantLock类和Condition类实现多线程顺序执行
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git原理其实很简单:使用不同的Condition实例即可,和这篇文章里的唤醒特定线程有异曲同工之处https://blog.csdn.net/XIANZHIXIANZHIXIAN/article/details/864844...原创 2019-01-24 22:42:57 · 406 阅读 · 0 评论 -
Java多线程问题--ReentrantLock和Condition实现多生产者/多消费者模式以及唤醒特定线程
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.gitReentrantLock和Condition基本用法1、ReentrantLock类中的lock()和unlock()方法要成对使用,lock()方法使当前线程获得对象锁,unlock()方法使当前线程释放对象锁。...原创 2019-01-14 22:09:07 · 595 阅读 · 0 评论 -
Java多线程问题--schedule函数和scheduleAtFixedRate的用法和区别
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.gitschedule函数和scheduleAtFixedRate的用法和区别1、schedule(TimerTask task, Date time)的作用在指定的时间执行任务,如果指定时间早于当前时间则立即执行任务...原创 2019-02-14 23:05:39 · 2113 阅读 · 4 评论 -
Java多线程问题--PipedReader和PipedWriter实现线程间通信
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git相关知识讲解1、Java中提供了很多输入/输出流Stream,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输入管道,另一个线程从输入管道中读取数据。通过使用管道,...原创 2019-01-02 21:15:21 · 425 阅读 · 0 评论 -
Java多线程问题--PipedInputStream和PipedOutputStream实现线程间通信
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git相关知识讲解1、Java中提供了很多输入/输出流Stream,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输入管道,另一个线程从输入管道中读取数据。通过使用管道,...原创 2019-01-02 21:03:30 · 1240 阅读 · 0 评论 -
Java多线程问题--wait/notifyAll多生产者和多消费者
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git相关知识讲解1、wait()方法是Object类的方法,该方法用来将当前线程置入“预执行队列”中,并且在wait()所在的代码处停止执行,知道接到通知或被中断位置。在wait()方法调用前,线程必须获得该对象的对象级...原创 2019-01-02 20:38:41 · 382 阅读 · 0 评论 -
Java多线程问题--suspend()和resume()不同步问题
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git使用suspend()和resume()有可能会导致不同步问题,值得注意!MyObject.javapackage thread.suspend.resume.nosamevalue;/** * 检验susp...原创 2018-12-12 20:30:11 · 324 阅读 · 0 评论 -
Java多线程问题--synchronized方法锁
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git结论:当一个类的同一个实例被多个线程使用时,这些线程持有的是这个实例的对象锁。一个线程在执行该类中synchronized修饰的方法时,其它线程可以调用该类中非synchronized修饰的方法;如果其它线程要调用该类中sy...原创 2018-12-13 22:32:10 · 200 阅读 · 0 评论 -
Java多线程问题--死锁示例
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git首先看看Java中线程死锁的原因多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放,而该资源又被其他线程锁定,从而导致每一个线程都得等其它线程释放其锁定的资源,造成了所有线程都无法正常结束。死锁产生的四个...原创 2018-12-20 22:14:58 · 205 阅读 · 0 评论 -
Java多线程问题--wait()和notify()
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git介绍wait()和notify()的使用以及注意事项1、wait()方法是Object类的方法,该方法用来将当前线程置入“预执行队列”中,并且在wait()所在的代码处停止执行,知道接到通知或被中断位置。在wait(...原创 2018-12-26 23:42:16 · 615 阅读 · 0 评论 -
Java多线程问题--停止线程的方法:异常法
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git停止线程的方法有以下几种1、异常法:通过抛出异常来跳出正在运行的线程,在catch块中可以将异常向上层抛出,线程的停止事件得以传播。2、沉睡法:通过Thread.sleep()一个很长的时间,让线程抛出java.la...原创 2018-12-10 21:32:44 · 522 阅读 · 0 评论 -
Java多线程问题--当i++遇上System.out.println()
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git首先我们看看System.out.println()的源码,输出x的时候是由synchronized代码块包裹着的,那么System.out.println(i++)是否就是线程安全的呢?然而并不是的,下面来说明原因...原创 2018-12-10 21:57:13 · 1274 阅读 · 0 评论 -
Java多线程问题--synchronized锁重入
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到一个对象锁后,再次请求此对象的锁时是可以再次得到该对象的锁的。这也证明在一个synchronized方法/块的内部调用本类...原创 2018-12-17 20:19:18 · 194 阅读 · 0 评论 -
Java多线程问题--suspend()和resume()独占问题
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git为什么线程暂停不用suspend()和resume()了?因为这两个方法有独占和不同步的问题,先说说“独占”1、线程内部调用suspend()方法却未调用resume()导致的对象锁独占情况,原因在程序备注里Sync...原创 2018-12-11 20:32:19 · 514 阅读 · 0 评论 -
Java多线程问题--静态同步synchronized方法和synchronized(class)代码块
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git1、关键字synchronized还可以用在static静态方法上,如果这样写是对当前的*.java文件对应的Class类进行持锁。2、同步synchronized(Class)代码块的作用和sunchronized s...原创 2018-12-18 20:05:48 · 869 阅读 · 1 评论 -
Java多线程问题--数据类型String的常量池特性
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git什么是常量池这里单单只说Java常量池,Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)...原创 2018-12-18 20:42:38 · 424 阅读 · 0 评论 -
Java多线程问题--内置类和静态内置类的应用
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git书中前几章的自然看得懂为什么结果是这样,没看的也可以看看本文的分析,希望能够有所帮助第一个示例第一个示例中是内置静态类的中的两个方法使用不同的对象锁,结果可想而知,两个方法是异步运行的。OutClass.ja...原创 2018-12-24 20:44:51 · 264 阅读 · 0 评论 -
Java多线程问题--锁对象的改变
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git这个问题很有趣,有一段时间让我百思不得其解,后来和小伙伴讨论最后弄明白了;对这个感兴趣的小伙伴可以思考思考哈,注意推敲红字的含义。摘录书里面的一段话:在将任何数据类型作为同步锁时,需要注意的是,是否有多个线程同时持有锁对...原创 2018-12-24 22:05:51 · 498 阅读 · 0 评论 -
Java多线程问题--线程运行时出现异常的解决办法
本文内容部分引自《Java多线程编程核心技术》,感谢作者!!!代码地址:https://github.com/xianzhixianzhixian/thread.git线程运行时出现问题的几种解决办法1、为特定线程指定一个异常处理器thread.setUncaughtException(new UncaughtExceptionHandler(){ @Override...原创 2019-03-05 22:59:58 · 2828 阅读 · 0 评论