package threadTest;public class Writer extends Thread{
private String name; 

public Writer(String name)
{
this.name = name;
}

public void run()
{
while(true) {
System.out.println(name + "写一段文稿");
System.out.println(name + "休息一下");
try
{
Thread.sleep((int)(Math.random()*1000));
}
catch(InterruptedException ex)
{
ex.printStackTrace();
}
}
}

public static void main(String[] args) {
Thread wr1 = new Writer("作家1");
Thread wr2 = new Writer("作家2");
wr1.start();
wr2.start();
}
}输出结果为:
作家1写一段文稿
作家2写一段文稿
作家1休息一下
作家2休息一下作家1写一段文稿
作家1休息一下
作家1写一段文稿
作家1休息一下
作家2写一段文稿
作家2休息一下谁能告诉我为什么一开始为什么不是:
作家1写一段文稿
作家1休息一下

解决方案 »

  1.   

    wr1.start();
    wr2.start();这个是关键!同步和互斥的问题~
      

  2.   

    因为你同时开始的程序..
    System.out.println(name + "写一段文稿"); 这个先执行到 ,但是执行这个需要耗时,在这段时间内 
    另一个线程也开始输出了
      

  3.   

    System.out.println(name + "写一段文稿");
    System.out.println(name + "休息一下");
    将他们在另一个内部类的方法中同步一下,应该就可以了。private class Printer{

    private synchronized void print(){
    System.out.println(name + "写一段文稿");
    System.out.println(name + "休息一下");
    }
    }
      

  4.   

    作家1在执行System.out.println(name + "写一段文稿");
    这条语句是作家2等待,等作家1执行完毕后作家2开始在执行System.out.println(name + "写一段文稿");语句
      

  5.   

    线程的CPU时间是系统随机分配的,所以作家1线程执行System.out.println(name + "写一段文稿");后,可能系统把CPU权限收回让给作家2线程执行了,所以作家2线程也有可能会执行System.out.println(name + "写一段文稿");然后系统再把CPU权限让给作家1线程,作家1线程继续执行System.out.println(name + "休息一下");
      

  6.   


    package test;public class Test extends Thread{
    private String name;  
    private static Object lock = new Object();
    public Test(String name)
    {
    this.name = name;
    } public void run()
    {
    while(true) {
    synchronized(lock){
    System.out.println(name + "写一段文稿");
    System.out.println(name + "休息一下");
    } try
    {
    Thread.sleep((int)(Math.random()*1000)); 
    }
    catch(InterruptedException ex)
    {
    ex.printStackTrace();
    }
    }
    } public static void main(String[] args) {
    Thread wr1 = new Test("作家1");
    Thread wr2 = new Test("作家2");
    wr1.start();
    wr2.start();
    }
    }给你改了下,楼主
    你需要加个同步,获得得锁和释放锁,只有拥有锁的线程才允许执行
      

  7.   

    嗯,线程基础,关键字synchronized同步块。 网上资料很多的