子线程

实现死锁的两种方式以及ReentrantLock的额外功能(未完待续)

戏子无情 提交于 2020-04-09 19:48:15
思路: 死锁是指在多线程环境下的这么一种场景,两个(多个)线程在分别拿到自己的锁时尝试获取对方的锁,由于必须等待对方释放锁才能获取,然而双方谁也不肯先释放自己的锁, 导致双方谁都无法继续执行。 通过一个实现runnable接口的类实例作为两个线程的执行对象,在该类中有两个Object的静态变量作为锁.通过该类的一个开关变量实现在同一个run方法中执行两段不同的逻辑,一个先获取锁1, 再获取锁2,另一个分支则刚好相反。 为了使第一个执行的线程在拿到第二个锁之前失去cpu执行权,方便构造死锁场景,在尝试获取第二个锁之前,让线程休眠一段时间,因为sleep()方法不会释放锁。 实现死锁的方法有两种,一种是使用synchronized同步代码块,另一种是使用reentrantlock重入锁。 使用同步代码块实现死锁 代码 public class TestDeadLock implements Runnable { //开关 private boolean flag; //锁1 private static Object lock1 = new Object(); //锁2 private static Object lock2 = new Object(); public TestDeadLock(boolean flag) { this.flag = flag; } @Override

ccflow 如何把子线程的数据汇总到合流节点表单中去?

╄→尐↘猪︶ㄣ 提交于 2019-11-27 19:04:40
*** 如何把子线程的数据汇总到合流节点表单中去? 对于分合流程来说,一般的模式就是分流– 子线程– 合流。通常是分流点与合流点是同一个人处理,比如:事例中的部门负责人启动分流让本部门的成员填写同一格式的工作日志,然后汇总到部门经理。 *** 现实的业务需求是合流点上要看到每个子线程的工作内容,如何把子线程的数据汇总到合流节点表单中去? CCFlow 为您提供如下两种方案: 1 ,使用 ccflow 内部的约定规则:在合流点上创建一个明细表,明细表的字段与子线程节点表单字段对应,这样才确保可以复制,在合流节点表单上的明细表里的属性里的设置是分流节点表单字段。 这样,每一个子线程完成后就向这个明细表中插入一条数据,并把子线程节点表单的数据按照字段对应关系复制到明细表的一行记录中。 2, 利用子线程的节点事件:在子线程发送成功与撤消的两个节点事件中向指定的表写入数据,一般是向合流节点表单写入,以满足您的特殊要求。在发送成功时插入数据,在撤消时删除数据。 第一种方案适用于大众情况,第二种方案需要写存储过程,可以处理复杂的业务逻辑。 来源: oschina 链接: https://my.oschina.net/u/10897/blog/52424