永发信息网

Java 如何同步顺序执行多个线程

答案:1  悬赏:0  手机版
解决时间 2021-01-02 06:38
Java 如何同步顺序执行多个线程
最佳答案
这个要分段来实现, 第一步是让线程同步,第二部是让线程有顺序。
同步:我们可以用synchronized来解决。
Java线程同步原理: java会为每个object对象分配一个monitor,当某个对象的同步方法(synchronized methods )被多个线程调用时,该对象的monitor将负责处理这些访问的并发独占要求。
当一个线程调用一个对象的同步方法时,JVM会检查该对象的monitor。如果monitor没有被占用,那么这个线程就得到了monitor的占有权,可以继续执行该对象的同步方法;如果monitor被其他线程所占用,那么该线程将被挂起,直到monitor被释放。
当线程退出同步方法调用时,该线程会释放monitor,这将允许其他等待的线程获得monitor以使对同步方法的调用执行下去。就像下面这样:
public void test() {
synchronized (this) {
//做一些事
//这里只会有一个线程来调用该方法,因为只有一个this对象作为资源分配给该线程
}

}

顺序:我们可以用List来解决,因为它是有序的。我们只需要将要执行的线程放入到List中

上代码:

public class SyncManager {

private List<Runnable> runnableList;

public SyncManager(){}

public SyncManager(List<Runnable> runnableList) {
this.runnableList = runnableList;
}

public void setRunnable(List<Runnable> runnableList) {
this.runnableList = runnableList;
}
public void run() {
//遍历代执行的线程集合
for(Runnable runnable: runnableList) {
runThread(runnable);
}
}


private void runThread(Runnable runnable) {
synchronized (this) {
runnable.run();//这里需要注意的是:必须调用run方法,因为如果你调用了start方法,线程只会向JVM请求资源,但是未必就执行其中的run。
//这个方法是同步的,所以当前只有一个线程占用了this对象。
}
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
杜牧有一首关于牛郎织女星的诗,
同理心的分析面试到最后剩下3个最优秀的人 面
单选题目前科学家研制成功的“乳房生物反应器
饸饹怎么读
落下的英文怎么说
南京栖霞山什么时候去最好,需要门票不?
我想用led和usb插头做一个小夜灯,请问怎么粘
你在做什么工作
洧代表什么意思
水果唱歌用的是什么软件?
英语翻译Given an integer array A,which con
读波斯湾石油外运航线图,以下描述不符合实情
和孙悟空有关的电影
曾用名怎么证明
这个时代到底是资本雇佣创业者,还是创业者雇
推荐资讯
我家冬梅为什么长长就枯萎了呢
适合小学六年级的科普读物有哪些
外贸公司帮工厂做代理的时候,单证应该怎么传
鸟算命的是什么原理
芜湖特产有哪些
桃的英文是什么
大众凌渡,朗逸,速腾,宝来哪个性价比高
The toddler who miraculously a fall from
校园适合种什么树
The dress ____smooth and soft.I’ll take i
百褶裙搭配什么上衣 8种穿法学起来
河南安阳市一汽大众的捷达分期付款吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?