public class MyThread implements Runnable{
String myString = "YES";
public void run(){
this.myString="NO";
}
public static void main(String[] args) {
MyThread t = new MyThread();
new Thread(t).start();
for (int i = 0;i < 1000;i++)
System.out.println(t.myString);
}
}
public class Test {
public static int i = 0;
public static void main(String[] args) throws Exception {
for (int x = 0; x < 1000; x++) {
MyThread mt = new MyThread(x);
mt.start();
}
Thread.sleep(1000);//让上面的循环跑完
System.out.println(Test.i);
}
}
class MyThread extends Thread {
int loopNum;
MyThread(int loopNum) {
this.loopNum = loopNum;
}
public void run() {
Test.i = Test.i + 1;
if (loopNum == 999) {
System.out.println("loop end");
}
}
}
------解决方案-------------------- 第一问: new Thread(t).start();还没执行到run时间片就到了 轮到main所在的线程执行,所以先打印了YES后面就全部是NO了 想要全部是NO在 new Thread(t).start();完加上Thread.sleep(100)可能差不多了
------解决方案-------------------- 这个要看当前CPU的时间片轮到了那个一个线程,main也是其中的一个线程序.第一段很容易理解,第二段代码,就算你的for循环创建了1000个线程,也许这时候,main的CPU时间还没有结束,还要继续往下执行main线程中的代码.不知道这样说可否理解.
------解决方案-------------------- MyThread t = new MyThread(); new Thread(t).start(); \\线程跑起时,主线程也进入下面的句语 for (int i = 0;i < 1000;i++) System.out.println(t.myString);