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休息一下
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休息一下
wr2.start();这个是关键!同步和互斥的问题~
System.out.println(name + "写一段文稿"); 这个先执行到 ,但是执行这个需要耗时,在这段时间内
另一个线程也开始输出了
System.out.println(name + "休息一下");将他们在另一个内部类的方法中同步一下,应该就可以了。private class Printer{
private synchronized void print(){
System.out.println(name + "写一段文稿");
System.out.println(name + "休息一下");
}
}
这条语句是作家2等待,等作家1执行完毕后作家2开始在执行System.out.println(name + "写一段文稿");语句
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();
}
}给你改了下,楼主
你需要加个同步,获得得锁和释放锁,只有拥有锁的线程才允许执行