Java線程使用的是搶佔式調度,誰優先級高誰先運行,優先級一樣則隨機
繼承Thread類
自定義類並重寫其run()方法
public class MyThreadCreate01 extends Thread{
@Override
public void run() {
for(int i = 0;i<=50;i++) {
//currentThread()獲取當前線程的對象
//getName()獲取線程的名字
System.out.println(currentThread().getName()+"繼承了Thread類的線程"+i);
}
}
}
@Test
public void test01(){
MyThreadCreate01 thread01 = new MyThreadCreate01();
MyThreadCreate01 thread02 = new MyThreadCreate01();
thread01.start();
thread02.start();
for(int i = 0;i<=50;i++) {
System.out.println("啦啦啦啦"+i);
}
}
調用Thread的start()方法即可開啓線程
實現Runnable接口
public class MyThreadCreate02 implements Runnable{
@Override
public void run() {
for(int i = 0;i<50;i++) {
System.out.println(Thread.currentThread().getName()+"實現Runnable接口的線程"+i);
}
}
}
然後創建對象,在將對象作爲參數傳入Thread的構造函數中,然後用Thread對象開啓線程
@Test
public void test02() {
MyThreadCreate02 myThread = new MyThreadCreate02();
Thread thread01 = new Thread(myThread);
Thread thread02 = new Thread(myThread);
thread01.start();
thread02.start();
for(int i = 0;i<=50;i++) {
System.out.println("哈哈哈哈"+i);
}
}
使用匿名內部類創建線程
@Test
public void test03() {
//第一種方式,使用Thread的匿名內部類
new Thread() {
public void run() {
for(int i = 0;i<100;i++) {
System.out.println(Thread.currentThread().getName()+"Thread的匿名內部類創建線程"+i);
}
}
}.start();
//使用匿名內部類的方式實現Runnable接口,重新Runnable接口中的run方法
Runnable runnable = new Runnable() {
@Override
public void run() {
for(int i = 0;i<100;i++) {
System.out.println(Thread.currentThread().getName()+"Runnable接口的匿名內部類"+i);
}
}
};
new Thread(runnable).start();
}