Java创建多线程

时间:2021-06-30 17:30:17

继承Thread方式创建子线程

1.创建一个继承Thread的子类

2.重写Thread类的run()方法,实现子线程要完成的功能

3.在主线程类中创建一个子线程类的对象

4.调用子线程类的start()方法,启动此子线程(实际上start()方法是调用了该类的run()方法)

package TestThread;

public class GeneticThreadWindow extends Thread{
static int ticket=100;

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


package TestThread;

public class TestWindow {

public static void main(String[] args) {
GeneticThreadWindow w1=new GeneticThreadWindow();
GeneticThreadWindow w2=new GeneticThreadWindow();
GeneticThreadWindow w3=new GeneticThreadWindow();

w1.setName("窗口1");
w2.setName("窗口2");
w3.setName("窗口3");
w1.start();
w2.start();
w3.start();
}
}

注:子线程类的start()方法只能启动一次。不能通过调用子线程类的run()方法来启动子线程,因为这样没有初始化线程的执行。


线程中常用的方法

1.        start():启动线程并执行相应的run()方法

2.        run():子线程要执行的代码放到run()方法中

3.        currentThread():静态方法,获取到当前的线程

4.        getName():获取线程的名字

5.        setName():设置线程的名字

6.        yield():释放当前CPU的执行权

7.        join():在A线程中调用B线程的join方法表示当调用此方法时,A线程停止执行,直到B线程执行完毕,A线程才继续执行。(插队)

8.        isAlive():判断线程是否存活

9.        sleep(long l):显示地让当前线程睡眠l毫秒

10.    线程通信:wait()   notify()  notifyAll()

11.    getPriority():

12.    setPriority():优先级最大为10,最小为1。Thread.MAX_PRIORITY就是10,Thread.MIN_PRIORITY

设置了优先级,使得线程抢到CPU使用权的概率变大,并不是优先级高执行完优先级低的再执行。


创建匿名类线程:

new Thread(){
public void run() {
// compute primes larger than minPrime
}
}.start();

实现Runnable方式创建子线程

1.        创建一个实现Runnable接口的类

2.        实现Runnable的抽象方法run()

3.        创建一个Runnable接口实现类的对象

4.        将此对象作为形参传递给Thread类的构造器,创建Thread对象,此对象即为一个线程

5.        调用线程的start()方法:启动线程

package TestThread;

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

package TestThread;

public class TestWindow {

public static void main(String[] args) {
(new TestWindow()).TestWin2();
}

public void TestWin2(){
ImplementsThreadWindow p = new ImplementsThreadWindow();

Thread w1=new Thread(p);
Thread w2=new Thread(p);
Thread w3=new Thread(p);

w1.start();
w2.start();
w3.start();

}
}


两种创建方式的对比

1. 联系:public class Thread extends Object implements Runnable
2. 哪一种方式好?实现的方式优于继承的方式。因为a.实现的方式避免了单继承的局限性,可以集成一个类,然后再继承Runnable接口。 b.多个线程操作同一份资源,更适合使用实现的方式。


线程的生命周期

Java创建多线程