作者:NHHermit | 来源:互联网 | 2023-09-23 18:43
public static void main(String[] args) {
ThreadTest threadTest1 =new ThreadTest();
new Thread(threadTest1).start();
new Thread(threadTest1).start();
}
}
运行结果
从案例中我们可以知道:ThreadTest 继承了 Runnable 接口,并且实现了run方法。
在 ThreadMemo 中,我们创建ThreadTest,并且是执行了start() 方法,并没有直接执行run方法。
从运行结果我们可以看出:我们运行了run方法里面的程序。
并且线程1和线程0 交替执行。
下面我们来看看这个线程的执行过程。
Runnable 是一个接口,它抽象化了一个线程的执行流,定义如下:
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface code Runnable /code is used
* to create a thread, starting the thread causes the object's
* code run /code method to be called in that separately executing
* thread.
* p
* The general contract of the method code run /code is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
第一步:实现接口Runnable接口。
第二步:创建一个线程,并且将实现Runnable接口的类放进去。
第三步:使用线程的start() 方法,启动线程。这个时候,Jvm会自动去找到run方法,并且执行run方法,同时不影响主进程继续往下执行。
线程案例:
public class Thread1 extends Thread {
public static int ticket = 5;
@Override
public void run() {
try {
System.out.println("当前线程:"+Thread.currentThread().getName());
while(true){
synchronized (this) {
Thread.sleep(2000L);
if (this.ticket 0) {
ticket--;
System.out.println(Thread.currentThread().getName() + ":出售一张票!"+"剩余票量:" + ticket);
} else {
System.out.println("没有票了!");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}