
并发编程
文章平均质量分 57
-清风明月-
这个作者很懒,什么都没留下…
展开
-
Java中Runnable和Thread的区别
很多时候我们都知道在Java中创建线程的方式有最常见的两种:实现Runnable接口 继承Thread类其实我也是这样认为的直到有一天无意中看到了Runnable和Thread源码,才真正明白了其中的道理。Runnable源码:@FunctionalInterfacepublic interface Runnable { /** * When an object implementing interface <code>Runnable</code>原创 2021-08-09 11:08:24 · 159 阅读 · 0 评论 -
Java线程死锁以及问题定位
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够碍到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。产生死锁主要原因:系统资源不足 进程运行推进的顺序不合适 资源分配不当发生死锁的四个条件:互斥条件,线程使用的资源至少有一个不能共享的。 至少有一个线程必须持有一个资源且正在等待获取一个当前被别的线程持有的资源。 资源不能被抢占。 循环等待。如何解决死锁问.原创 2021-08-08 16:54:52 · 3458 阅读 · 0 评论 -
Java多线程Lock与Condition的应用
在某些情况下为实现精确唤醒某个线程,需要使用Lock与Condition组合来实现,而synchronized则不大容易实现这个目标。例如有这个的需求:线程A输出5个数子,然后启动线程B输出8个数字,然后启动线程C输出11个数字,然后再次启动线程A输出5个数字,按照A->B-C的顺序循环3次,这个案例中明确要求启动线程有启动顺序。按照多线程编程的模式:1. 线程操作资源类2. 判断、干活(业务处理)、唤醒通知3. 严防虚假唤醒先定义个资源类ShareResourcenumber作为控原创 2021-08-07 22:09:19 · 299 阅读 · 0 评论 -
Java多线程并发实例生产者消费者--加锁实现
在这个案例中使用可重入锁来实现生产者消费模型。在这个案例中分别使用两个线程对同一个对象进行操作,实现生产一个商品消费一个商品的操作。多线程操作的三个重要步骤:1. 线程操作资源类2. 判断、干活(业务处理)、唤醒通知3. 严防虚假唤醒在资源类UserShareData中义了两个方法producer() 方法用于生产一个商品consumer()方法用于消费一个商品在producer() 方法遵循多线程处理的3个步骤,因为使用的加锁机制,所以基本模式是这样:加锁try{ 1.原创 2021-08-07 19:33:02 · 2755 阅读 · 0 评论 -
Java多线程并发实例生产者消费者--初级版本
在本例中演示了使用一个生产者线程和一个消费者线程,生产者仅能生产一个商品等待消费者消费,消费者把这个商品消费之后,等待生产者生产新的商品。最终要求的效果是:生产一个商品消费一个商品生产一个商品消费一个商品......要求共进行10轮操作多线程应用的3个重要步骤:1. 线程操作资源类2. 判断、干活(业务处理)、唤醒通知3. 严防虚假唤醒资源类是高内聚的,为方便操作,定义了必要的方法,在本例中使用synchronized+wait来实现同步操作Data类定义了两个方法produ.原创 2021-08-07 18:49:44 · 141 阅读 · 0 评论