您的位置:首页 > 编程语言 > Java开发

Java.线程.Thread类.Runnable接口.start().setDaemon().join()

2010-12-10 00:14 555 查看
凌晨零点。太晚了,脑子不转了。睡觉先。

------------------------------------------------- Start

//多个售票窗口同时卖票。总共100张车票。
class ThreadDemo2
{
public static void main(String [] args)
{
TestThread t=new TestThread(); //TestThread类实例化了一个对象t。

/* //试图应用setName()设置线程名称不成功。why?
Thread w1=new Thread(t);
w1.currentThread().setName("窗口1");
w1.start();
Thread w2=new Thread(t);
w2.currentThread().setName("窗口2");
w2.start();
Thread w3=new Thread(t);
w3.currentThread().setName("窗口3");
w3.start();
*/

//开了7个线程。
Thread w1=new Thread(t);
w1.setDaemon(true); //将此线程转为后台线程。main运行结束时,此线程即结束
w1.start();

new Thread(t).start(); //下面六个为前台线程。main运行结束时,这些线程不会结束。
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();

}
}

class TestThread implements Runnable  //定义TestThread类实现Runnable接口。
{
private int tickets=100;
public void run()
{
while(tickets>0)
{
/* //////////////////////测试程序安全问题。卖票的这几个线程不默契,可能会同一张票多次卖出或者卖到负数。//
try
{
Thread.sleep(10); //Thread.sleep()静态方法:迫使线程执行到该处暂停执行,让出CPU给别的线程,在指定的时间后(毫秒)CPU回到被暂停的线程继续执行。在此处用来增大此程序出错的几率。
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
//////////////////////////*/

System.out.println(Thread.currentThread().getName()+" is saling ticket "+tickets--);
}
}
}


//join()的应用
class JoinThread
{
public static void main(String [] args)
{
TestThread t=new TestThread();
Thread tt=new Thread(t);
tt.start(); //i=10之前,tt所在的线程与main线程交替执行。i循环到100时,合并到main线程。所以要等到tt线程运行完之后main线程才会继续执行。
int i=0;
while(i<=15) //10-15次要等到tt线程运行结束,才能运行。
{
if(i==10) //i=10时,合并线程
{	try
{
tt.join(); //当i=10时,合并到main线程
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
System.out.println("main thread "+i++);
}
}

}

class TestThread implements Runnable
{
public void run()
{
int i=0;
while(i<20)
{
System.out.println(Thread.currentThread().getName()+" thread "+i++);
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐