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

java基础关于创建线程的两种方式

2014-06-05 18:40 791 查看
创建线程有两种方式,一种继承thread类,另一种实现runnable接口

方式一:public class ThreadDemo01{
public static void main(String[] args) {
Thread01 t1 = new Thread01();
Thread01 t2 = new Thread01();
t1.setName("线程1");//设置线程的名称
t2.setName("线程2");
//启动线程
t1.start();
t2.start();
System.out.println(Thread.currentThread().getName());//main
//t1.start();//无法多次启动同一个线程,抛出IllegalThreadStateException异常
}
}

class Thread01 extends Thread{
public void run(){//线程体
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "-->i:" + i);
}
}
}
方式二:
public class Ticket_thread {
public static void main(String[] args) {
//创建4个线程第二种方法
SellTicket s = new SellTicket();
Thread t1 = new Thread(s,"窗口1");
Thread t2 = new Thread(s,"窗口2");
Thread t3 = new Thread(s,"窗口3");
Thread t4 = new Thread(s,"窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}

class SellTicket implements Runnable{
int ticket = 10;
@Override
public void run() {
// TODO Auto-generated method stub

while (ticket > 0) {
sellTicket();
}
}
public synchronized void sellTicket(){

if(ticket > 0){
try {
Thread.sleep(100);
//Thread.currentThread().getName() 获取当前线程的名称 (currentThread()获取当前运行线程的引用)
System.out.println(Thread.currentThread().getName() +":卖出的第" + ticket-- + "张票");
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}

}
}
}
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标(target)对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: