一道java线程题目
编写一个应用程序创建两个线程,一个线程打印输出1~1000之间所有的奇数,另外一个线程打印输出1~1000之间所有的偶数,要求两个线程随机休眠一段时间后继续打印输出下一个...
编写一个应用程序创建两个线程,一个线程打印输出1~1000之间所有的奇数,另外一个线程打印输出1~1000之间所有的偶数,要求两个线程随机休眠一段时间后继续打印输出下一个数。
public class JiOu2 {
public static void main(String[]args){
output T=new output();
Thread Jishu=new Thread(T);
Thread Oushu=new Thread(T);
Jishu.start();
Oushu.start();
while(true){
if(output.m==1000)
System.exit(0);
}
}
}
class output implements Runnable{
static int m;
public void run(){
for(m=1;m<=1000;m++){
if(m%2==1){
System.out.println("奇数:"+m);
}try{
Thread.sleep((int)(Math.random( )*100));
}catch(InterruptedException e){}
if(m%2==0){
System.out.println("偶数:"+m);
}try{
Thread.sleep((int)(Math.random( )*100));
}catch(InterruptedException e){}
}
}
}
以上是我写的代码,但是为什么显示时偶数有重复的出现呢,求解答 展开
public class JiOu2 {
public static void main(String[]args){
output T=new output();
Thread Jishu=new Thread(T);
Thread Oushu=new Thread(T);
Jishu.start();
Oushu.start();
while(true){
if(output.m==1000)
System.exit(0);
}
}
}
class output implements Runnable{
static int m;
public void run(){
for(m=1;m<=1000;m++){
if(m%2==1){
System.out.println("奇数:"+m);
}try{
Thread.sleep((int)(Math.random( )*100));
}catch(InterruptedException e){}
if(m%2==0){
System.out.println("偶数:"+m);
}try{
Thread.sleep((int)(Math.random( )*100));
}catch(InterruptedException e){}
}
}
}
以上是我写的代码,但是为什么显示时偶数有重复的出现呢,求解答 展开
1个回答
展开全部
没有同步,m出现了问题。加上synchronized关键字
public synchronized void run() {
for (m = 1; m <= 1000;m++) {
if (m % 2 == 1) {
System.out.println("奇数:" + m);
}
try {
Thread.sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
}
if (m % 2 == 0) {
System.out.println("偶数:" + m);
}
try {
Thread.sleep((int) (Math.random() * 100));
} catch (InterruptedException e) {
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询