永发信息网

java多个线程执行的顺序是按顺序执行的吗

答案:3  悬赏:50  手机版
解决时间 2021-11-26 07:11
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 runnableList;

public SyncManager(){}

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

public void setRunnable(List 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对象。
}
}
}
全部回答
随机的,没有什么固定的顺序
建立了一个队列,为每一个Thread保存了一个对象锁,保证按顺序执行。线程启动的时候,使随机的,但是执行代码是按顺序的。
import java.util.LinkedList;
import java.util.Queue;
public class ThreadTest {
private static Queue qThread=new LinkedList();//线程同步对象队列
public static synchronized void putObject(Object t){
qThread.offer(t);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
停车场(公安干警住宅小区北)地址有知道的么?
今生却又分不开是卓衣婷那首歌的歌词
请问现在禁止做十岁生日宴吗
霞客咖啡地址有知道的么?有点事想过去!
追一个女生两个月了,聊天都是我主动找她,她
以锤炼语言的原则为话题的800字作文
暗战危城刘主任扮演者
我怀孕十七周零五天为什么每夭起床手都是肿了
哪里的Java教程比较全面?
阳光小饭桌(黄河路)地址在什么地方,想过去办
一套可以速成的内功或外功.
求《顾客为什么购买》读后感
什么是apf
多音字组词:扎的三种读音和组词
花土里长蚂蚁该怎么处理?
推荐资讯
中国梦想秀冯莹去世的真实
苏秘37度时间能量跟时光肌底哪个适合32岁用
台湾陶作坊台北店铺
砌筑用M10水泥砂浆配合比是多少?水泥为P.O32.
王政君与她的婆婆王太后关系很好吗
线代 有关秩 自由未知量 解空间的维数 第8题
红杉树智能英语(建设街)地址有知道的么?有点
衬衣皱了怎么办
差级数列15,13,2,11,-9的下一项是多少
页游修真世界禅修的PK技能要怎么设置?
请教顶吧对车身稳定有作用吗
中铁物流集团(团结南路398号附近中铁物流集团
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?