Thread类
Thread类是在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类,Thread子类中,必须明确地覆写Thread类中的run()方法,此方法为线程的主体
【多线程的定义语法】
class 类名称 extends Thread{
属性...;
方法...;
public void run{ //覆写Thread类中的run()方法,此方法是线程的主体
线程主体;
}
}
范例:继承Thread类实现多线程
package ThreadDemo01;
class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(name + "运行,i=" + i);
}
}
};
public class ThreradDemo01 {
public static void main(String[] args) {
MyThread mt1 = new MyThread("线程A");
MyThread mt2 = new MyThread("线程B");
mt1.run();
mt2.run();
}
};
结果:
线程A运行,i=0
线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程A运行,i=5
线程A运行,i=6
线程A运行,i=7
线程A运行,i=8
线程A运行,i=9
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
线程B运行,i=5
线程B运行,i=6
线程B运行,i=7
线程B运行,i=8
线程B运行,i=9
这样并没有启动线程,
如果要正确启动线程,是不能直接调用run()方法的,而应该从Thread类中继承而来的start()方法代码如下:
范例:启动线程
package ThreadDemo01;
class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(name + "运行,i=" + i);
}
}
}
public class ThreradDemo01 {
public static void main(String args[]) {
MyThread mt1 = new MyThread("线程A");
MyThread mt2 = new MyThread("线程B");
mt1.start();
mt2.start();
}
}
结果:
线程A运行,i=0
线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程A运行,i=5
线程A运行,i=6
线程A运行,i=7
线程A运行,i=8
线程A运行,i=9
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
线程B运行,i=5
线程B运行,i=6
线程B运行,i=7
线程B运行,i=8
线程B运行,i=9
再次运行:
线程A运行,i=0
线程B运行,i=0
线程B运行,i=1
线程B运行,i=2
线程B运行,i=3
线程B运行,i=4
线程B运行,i=5
线程B运行,i=6
线程B运行,i=7
线程B运行,i=8
线程B运行,i=9
线程A运行,i=1
线程A运行,i=2
线程A运行,i=3
线程A运行,i=4
线程A运行,i=5
线程A运行,i=6
线程A运行,i=7
线程A运行,i=8
线程A运行,i=9
从结果上看两个程序是交错运行的,那个线程抢到了CPU那个就可以运行,线程虽然调用的是start()方法,但实际上调用run()方法主体。
如果一个类只能继承Thread类才能事项多线程,则必定会受到单继承局限的影响,所以一般会使用Runnable接口完成
浙公网安备 33010602011771号