摘要: 下面的翻译: 例子: 输出结果:test()与test2()实现了相同的效果: 关键字synchronized与wait(),notify()/notifyAll()相结合可以实现等待/通知模式。类ReentrantLock也可以实现相同的功能,但须要借助Condition对象。Condition类 阅读全文
posted @ 2017-04-18 23:20 soar_hu 阅读(451) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。再spring框架中大量使用。使用这个工具类可以很简洁地编写出优美的多线程程序。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会 阅读全文
posted @ 2017-04-18 22:03 soar_hu 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 在很多情况下,主线程创建并启动子线程,如果子线程中有大量的耗时运算,主线程将早于子线程结束,如果想让主线程等待子线程结束后再结束,那么我们可以使用join()方法。调用join()方法的意思是当前线程使调用了该方法的线程执行完成然后再执行自己本身。api文档如下: 简单翻译如下:调用该方法的线程会等 阅读全文
posted @ 2017-04-18 21:11 soar_hu 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 在线程里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。下面 阅读全文
posted @ 2017-04-18 14:59 soar_hu 阅读(787) 评论(0) 推荐(0) 编辑
摘要: 线程之间的通信可以通过共享内存变量的方式进行相互通信,也可以使用api提供的wait(),notify()实现线程之间的通信。wait()方法是Object类的方法,改方法用来将当前的线程置入"预执行队列"中,并且在wait()方法代码处停止执行进行等待,知道接收到同一个monitor对象的noti 阅读全文
posted @ 2017-04-18 12:50 soar_hu 阅读(667) 评论(1) 推荐(1) 编辑
摘要: 输出结果: 一致处于阻塞状态,可以通过jps命令查看信息得到 然后再执行 jstack -l 8064 得到信息 死锁的一个经典场景为哲学家就餐问题。 产生死锁的原因主要是: (1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得 阅读全文
posted @ 2017-04-17 18:22 soar_hu 阅读(510) 评论(0) 推荐(0) 编辑
摘要: 1.1、synchronized方法的弊端 输出结果: 当把同步方法改为同步代码块时, 输出结果: 可见,并没有提升效率,这是因为锁定的范围比较广,所以效果和锁方法的差别并不是太。那么可以缩小边界区,也就是资源真正开始竞争的地方。因为类中的成员变量才是资源的竞争对象,所以需要在访问这些变量的地方进行 阅读全文
posted @ 2017-04-17 17:19 soar_hu 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 非线程安全其实是在多个线程对同一个对象实例的变量进行并发访问的时候发生,产生的后果就是脏读,也就是取到的数据是修改过的。而线程安全就是获得的实例变量的值是经过同步处理的,从而不会出现脏读现象。 什么时候使用同步呢?可以运用Brian的同步规则: 1.1、同步语句 1.1.1、实例变量非线程安全 如果 阅读全文
posted @ 2017-04-17 15:23 soar_hu 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 在Thread类中有很多方法值得我们关注一下。下面选取几个进行范例: 1.1、isAlive()方法 java api 描述如下: 示例代码如下: 输出结果: 1->false3->true2->false 在main线程休眠3秒后,子线程此时已经结束。那么isAlive()方法放回为假。 1.2: 阅读全文
posted @ 2017-04-17 11:21 soar_hu 阅读(282) 评论(0) 推荐(1) 编辑
摘要: 1.1、概念: 进程:进程是操作系统结构的基础,是一次程序的执行;是一个程序及其数据再处理器上顺序执行时所发生的活动;是程序再一个数据集合上运行的过程,它是系统进行系统资源分配和调度的最小单元。 线程:可以理解为一个程序的不同执行路径,是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度 阅读全文
posted @ 2017-04-17 05:54 soar_hu 阅读(272) 评论(0) 推荐(1) 编辑