Java创建线程的几种方式

2020-08-22  本文已影响0人  雨景江水

一.
Thread.currentThread() : 得到当前的线程对象
Thread.currentThread().getName() : 得到当前线程对象的名字

二.继承于Thread类

//1. 创建一个继承于Thread类的子类
class MyThread extends Thread {
//2. 重写Thread类的run()
@Override
public void run() {
for (int i = 0; i < 100; i++) {
if(i % 2 == 0){
System.out.println(Thread.currentThread().getName() + ":" + i);
}
}
}
}

public class ThreadTest {
public static void main(String[] args) {
//3. 创建Thread类的子类的对象
MyThread t1 = new MyThread();

    //4.通过此对象调用start():①启动当前线程 ② 调用当前线程的run()
    t1.start();
    //问题一:我们不能通过直接调用run()的方式启动线程。

// t1.run();

    //问题二:再启动一个线程,遍历100以内的偶数。不可以还让已经start()的线程去执行。会报IllegalThreadStateException

// t1.start();
//我们需要重新创建一个线程的对象
MyThread t2 = new MyThread();
t2.start();

    //如下操作仍然是在main线程中执行的。
    for (int i = 0; i < 100; i++) {
        if(i % 2 == 0){
            System.out.println(Thread.currentThread().getName() + ":" + i + "***********main()************");
        }
    }
}

}

二.Runnable形式

class Window1 implements Runnable{

private int ticket = 100;

@Override
public void run() {
    while(true){
        if(ticket > 0){
            System.out.println(Thread.currentThread().getName() + ":卖票,票号为:" + ticket);
            ticket--;
        }else{
            break;
        }
    }
}

}

public class WindowTest1 {
public static void main(String[] args) {
Window1 w = new Window1();

    Thread t1 = new Thread(w);
    Thread t2 = new Thread(w);
    Thread t3 = new Thread(w);

    t1.setName("窗口1");
    t2.setName("窗口2");
    t3.setName("窗口3");

    t1.start();
    t2.start();
    t3.start();
}

}

上一篇下一篇

猜你喜欢

热点阅读