gpt4 book ai didi

java - 学习Java,为什么我没有得到一些线程的重叠?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:44 25 4
gpt4 key购买 nike

我尝试了以下代码:

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;


public class Main {
static int i = 0;

public static void main(String[] args) {

new Thread(t1).start();
new Thread(t2).start();
new Thread(t3).start();
new Thread(t4).start();
new Thread(t5).start();
new Thread(t6).start();
}

private static void countMe(String name){
i++;
System.out.println("Current Counter is: " + i + ", updated by: " + name);
}

private static Runnable t1 = new Runnable() {
public void run() {
try{
for(int i=0; i<2; i++){
countMe("t1");
}
} catch (Exception e){}

}
};

private static Runnable t2 = new Runnable() {
public void run() {
try{
for(int i=0; i<2; i++){
countMe("t2");
}
} catch (Exception e){}
}
};
private static Runnable t3 = new Runnable() {
public void run() {
try{
for(int i=0; i<2; i++){
countMe("t3");
}
} catch (Exception e){}
}
};
private static Runnable t4 = new Runnable() {
public void run() {
try{
for(int i=0; i<2; i++){
countMe("t4");
}
} catch (Exception e){}
}
};
private static Runnable t5 = new Runnable() {
public void run() {
try{
for(int i=0; i<2; i++){
countMe("t5");
}
} catch (Exception e){}
}
};
private static Runnable t6 = new Runnable() {
public void run() {
try{
for(int i=0; i<2; i++){
countMe("t6");
}
} catch (Exception e){}
}
};
}

在 ideone 上得到了输出:
当前计数器为:1,更新时间:t1
当前计数器为:2,更新时间:t1
当前计数器为:3,更新时间:t2
当前计数器为:4,更新时间:t2
当前计数器为:5,更新时间:t3
当前计数器为:6,更新时间:t3
当前计数器为:7,更新时间:t4
当前计数器为:8,更新时间:t4
当前计数器为:9,更新时间:t5
当前计数器为:10,更新时间:t5
当前计数器为:11,更新时间:t6
当前计数器为:12,更新时间:t6
似乎一切都以线性方式进行,线程按照我创建它们的顺序一个一个地调用函数 countMe。多个线程是否意味着它们可能会出现故障。我在这里错过了什么?我正在运行的机器(我在 ideone.com 上试过)是否配置为按创建线程的顺序运行线程?

最佳答案

线程创建是昂贵的。可能发生的情况是,当您完成启动线程 2 时,线程 1 已经完成。当线程 3 开始做它的事情时,线程 2 已经完成了。等等。

插入六方cyclic barrier在线程函数的开始处查看它们 race (甚至可能会丢失一些 i 增量,因为不能保证 i++ 是原子的)。

如果这还不足以可靠地触发竞争,让线程做更多的工作。

关于java - 学习Java,为什么我没有得到一些线程的重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com