继承Thread类
1. 定义Thread类的⼦类,并重写该类的run()⽅法,该run()⽅法的⽅法体就代表了线程需要完成的任务,因此把run()⽅法称为线程执⾏体。
2. 创建Thread⼦类的实例,即创建了线程对象
3. 调⽤线程对象的start()⽅法来启动该线程
示例:
//继承自Thread类
class MyThread extends Thread{
//private int ticket = 12;
private static int ticket = 12;
//给线程起名字
public MyThread(String name){
super(name);
}
@Override
public void run() {
//线程的执行体
for (int i = 0; i < 4; i++) {
//System.out.println("新开的线程:"+i);
System.out.println(Thread.currentThread().getName()+"卖了一张票,剩下:"+ticket--);
}
}
}
测试:
public class Demo1 {
public static void main(String[] args) throws InterruptedException {//程序的入口
//创建子类对象
MyThread t1 = new MyThread("窗口1");
MyThread t2 = new MyThread("窗口2");
MyThread t3 = new MyThread("窗口3");
//step3:调用start()方法
//myThread.run();//这样写,是普通的方法的调用
t1.start();//相当于开启一个新的线程,这个新的线程跟main线程是平级的
t2.start();
t3.start();
}
}
实现Runnable接⼝
1. 定义Runnable接⼝的实现类,并重写该接⼝的run()⽅法,该run()⽅法的⽅法体同样是该线程的线程执⾏体。
2. 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
3. 调⽤线程对象的start()⽅法来启动线程。
示例:
//实现Runnable接口
class MyRunnable implements Runnable{
private int ticket = 12;
@Override
public void run() {
//线程的执行体
//线程的执行体
for (int i = 0; i < 4; i++) {
//System.out.println("新开的线程:"+i);
System.out.println(Thread.currentThread().getName()+"卖了一张票,剩下:"+ticket--);
}
}
}
测试:
public class Demo2 {
public static void main(String[] args) {
//step2:创建实现类的对象
MyRunnable myRunnable = new MyRunnable();
Thread t1 = new Thread(myRunnable,"窗口1");
Thread t2 = new Thread(myRunnable,"窗口2");
Thread t3 = new Thread(myRunnable,"窗口3");
//step3:启动一个线程
t1.start();
t2.start();
t3.start();
}
}
继承Thread 和实现Runnable的区别
如果⼀个类继承Thread,则不适合资源共享。但是如果实现了Runable接⼝的话,则很容易的实现资源共享。总结:实现Runnable接⼝⽐继承Thread类所具有的优势:
1. 适合多个相同的程序代码的线程去共享同⼀个资源。
2. 可以避免java中的单继承的局限性。文章来源:https://www.toymoban.com/news/detail-415479.html
3. 增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独⽴。文章来源地址https://www.toymoban.com/news/detail-415479.html
到了这里,关于Java 进阶(7) 创建线程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!