java多线程编程之Thread类实现多线程
程序员文章站
2022-05-05 22:03:18
...
继承Thread类,覆写run方法
java中实现多线程的定义,要实现特定的接口或者继承特定的父类。
class MyThread extends Thread{
private String title;
public MyThread(){
this.title = title;
}
@Override
public void run() {
for (int i=0;i<10;i++){
System.out.println(this.title+"运行,i="+i);
}
}
}
多线程要执行的功能都在run方法中进行定义。但是要注意的是run方法不能被直接调用,涉及到操作系统资源调度问题,所以要想启动多线程必须使用start()方法
public class ThreadDemo {
public static void main(String[] args) {
new MyThread("线程A").run();
new MyThread("线程B").run();
new MyThread("线程C").run();
}
}
运行结果为:
可以看出为顺序执行,因为执行的没有通过start启动多线程。如果换成如下代码:
public class ThreadDemo {
public static void main(String[] args) {
new MyThread("线程A").start();
new MyThread("线程B").start();
new MyThread("线程C").start();
}
}
则运行结果为:
虽然执行的是start方法,但最终执行的是run方法,并且所有的线程对象都是交替执行的,执行顺序不可控。
但是为什么不直接执行run方法,而要通过Thread类的start方法呢?
查看start方法源代码:
public synchronized void start() {
if (threadStatus != 0) //判断线程的状态
throw new IllegalThreadStateException(); //抛出了一个异常
group.add(this);
boolean started = false;
try {
start0(); //调用start0方法
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
}
}
}
private native void start0(); //只定义了方法名称,没有实现
//start0声明为native,表明需要将此方法依赖于不同的操作系统实现
start方法里面抛出了一个异常IllegalThreadStateException异常类对象,但是程序中并没有throws和try…catch处理,因为该异常一定是RuntimeException的子类,每一个线程类的对象只允许启动一次,如果重复启动就会抛出异常。例如下面代码:
public class ThreadDemo {
public static void main(String[] args) {
MyThread mt = new MyThread("线程A");
mt.start();
mt.start(); //重复进行了线程的启动
}
}
Thread的执行分析:
任何情况下,只要定义了多线程,多线程的启动方案只有一种,就是Thread类中的start方法。
上一篇: 微信小程序 简单的换肤
下一篇: 微信小程序总结
推荐阅读
-
JAVA多线程Thread和Runnable的实现
-
Java多线程之CAS算法实现线程安全
-
C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法
-
Java中实现多线程继承Thread类与实现Runnable接口的区别
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时3:Thread类实现多线程
-
JAVA多线程之实现用户任务排队并预估排队时长
-
Java多线程之Worker Thread模式
-
Java多线程教程之如何利用Future实现携带结果的任务
-
java多线程之:继承Thread类
-
day20Java-常用对象Thread-多线程实现方式1继承Thread类