class MyThread implements Runnable
{
Thread thrd;
MyThread(String name){
thrd = new Thread(this,name);//通过在构造器里实例化Thread对象
thrd.start();
}
public void run(){
System.out.println(thrd.getName()+"starting");
try
{
for (int i = 0; i<10 ; i++)
{
Thread.sleep(400);
System.out.println("子线程:"+thrd.getName()+ "计数"+i+" ");
}
}
catch (InterruptedException exc)
{
System.out.println("InterruptedException");
}
System.out.println("子线程结束!");
}
}
class ExtendsThread
{
public static void main(String[] args)
{
int i=0;
System.out.println("主线程开始!!");
MyThread mt1 = new MyThread("Child #1");
MyThread mt2 = new MyThread("Child #2");
MyThread mt3 = new MyThread("Child #3");
do
{
try
{
Thread.sleep(100);
System.out.print("主线程:"+ "计数"+(i++)+" ");
}
catch (InterruptedException exc)
{
System.out.println("InterruptedException");
}
}while(mt1.thrd.isAlive()||mt2.thrd.isAlive()||mt3.thrd.isAlive()); //这里把判断条件设置为子线程还在运行
System.out.println("主线程结束!");
}
{
Thread thrd;
MyThread(String name){
thrd = new Thread(this,name);//通过在构造器里实例化Thread对象
thrd.start();
}
public void run(){
System.out.println(thrd.getName()+"starting");
try
{
for (int i = 0; i<10 ; i++)
{
Thread.sleep(400);
System.out.println("子线程:"+thrd.getName()+ "计数"+i+" ");
}
}
catch (InterruptedException exc)
{
System.out.println("InterruptedException");
}
System.out.println("子线程结束!");
}
}
class ExtendsThread
{
public static void main(String[] args)
{
int i=0;
System.out.println("主线程开始!!");
MyThread mt1 = new MyThread("Child #1");
MyThread mt2 = new MyThread("Child #2");
MyThread mt3 = new MyThread("Child #3");
do
{
try
{
Thread.sleep(100);
System.out.print("主线程:"+ "计数"+(i++)+" ");
}
catch (InterruptedException exc)
{
System.out.println("InterruptedException");
}
}while(mt1.thrd.isAlive()||mt2.thrd.isAlive()||mt3.thrd.isAlive()); //这里把判断条件设置为子线程还在运行
System.out.println("主线程结束!");
}
}
1 如果在多线程里对某个方法加锁(也就是保持某个线程对资源的持续占用)可以在public static void run()里添加 synchronized(){}方法来使得对某个方法调用的同步。