public class thread11
{
public static void main(String[] args)
{
compute t=new compute();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
///创建一个线程类
///在这线程类中,使用循环语句输出字符
///在run方法中,使用同步块来给线程加一把锁
class compute extends Thread
{
int i=10;
static Object obj=new Object();
public void print()
{
System.out.println(Thread.currentThread().getName()+":"+i);
i--;
}
public void run()
{
while(i>0)
{
synchronized(obj)
{
print();
}
try
{
sleep(1000);
}
catch(Exception e){}
}
}
}
这是一本书上的例子,我认为输出结果应该是前三个线程名的顺序重复输出的,但实际输出结果好像是随机的。请高手指点下
{
public static void main(String[] args)
{
compute t=new compute();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
///创建一个线程类
///在这线程类中,使用循环语句输出字符
///在run方法中,使用同步块来给线程加一把锁
class compute extends Thread
{
int i=10;
static Object obj=new Object();
public void print()
{
System.out.println(Thread.currentThread().getName()+":"+i);
i--;
}
public void run()
{
while(i>0)
{
synchronized(obj)
{
print();
}
try
{
sleep(1000);
}
catch(Exception e){}
}
}
}
这是一本书上的例子,我认为输出结果应该是前三个线程名的顺序重复输出的,但实际输出结果好像是随机的。请高手指点下
new Thread(t).start(); //2
new Thread(t).start(); //3
这个并不是1执行完了才执行2。启动了多个线程。只要当前cpu有时间片,main主线程就不会等其它线程完了才执行。