摘要: 在java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5中增加的ReentrantLock也能实现同样的效果,并且功能更加强大。 比如具有嗅探锁定,多路分支通知等功能,在使用上比synchronized更加灵活。 1.Object类中的wait()方法相当于C 阅读全文
posted @ 2018-07-11 14:10 Mars.wang 阅读(573) 评论(0) 推荐(0) 编辑
摘要: 死锁在并发编程中是需要避免的,要修正死锁问题,必须明白死锁发生的条件: 1.互斥条件: 任务中使用的资源至少有一个是不能共享的 2.请求与保持条件: 一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3.不剥夺条件: 进程已获得的资源,在末使用完之前,不能强行剥夺。 4.循环等待条件: 若干进程 阅读全文
posted @ 2018-07-11 13:27 Mars.wang 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 总结 A. 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用对象是静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。 B. 每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的 阅读全文
posted @ 2018-07-11 11:59 Mars.wang 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 线程安全和非线程安全是多线程的经典问题,非线程安全会在多个线程对同一个对象并发访问时发生。 注意1: 非线程安全的问题存在于实例变量中,如果是方法内部的私有变量,则不存在非线程安全问题。 实例变量是对象的各个方法共有的,静态变量是类的所有对象共有的,这些变量在多线程情况下,就需要考虑线程安全问题。 阅读全文
posted @ 2018-07-11 11:33 Mars.wang 阅读(194) 评论(0) 推荐(0) 编辑
摘要: java语言中提供了各种各样的流供我们操纵数据,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。 一个线程发送数据到输出管道,另一个线程从输入管道读取数据,通过使用管道,实现不同线程间的通信,而无需借助于临时文件之类的东西。 在java jdk中提供了4个类用于线程间 阅读全文
posted @ 2018-07-11 10:30 Mars.wang 阅读(1567) 评论(0) 推荐(0) 编辑
摘要: 多生产者和多消费者是线程通信的经典案例,但是和生产者-消费者相比更为复杂,而且可能会产生程序假死。 阅读全文
posted @ 2018-07-11 09:21 Mars.wang 阅读(1254) 评论(0) 推荐(0) 编辑