java 多线程之继承Thread类实现创建多线程及实现Runnable接口创建多线程
1.Java 多线程之Thread类
-
Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来实现。
-
Thread类的特性
① 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体
② 通过该Thread对象的start()方法来调用这个线程 -
Thread类构造方法
① Thread():创建新的Thread对象
② Thread(String threadname):创建线程并指定线程实例名
③ Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法
④ Thread(Runnable target, String name):创建新的Thread对象
2.继承Thread类实现创建多线程
- 创建一个子线程,完成1-100之间的自然数的输出,同的主线程执行同样的操作 创
- 步骤
- 定义子类继承Thread类。
- 子类中重写Thread类中的run方法。
- 创建Thread子类对象,即创建了线程对象。
- 调用线程对象start方法:启动线程,调用run方法
//1.继承Thread
class SubThread extends Thread{
//2.重写Threa类的run()方法、方法内实现此子线程要完成的工作
public void run() {
for (int i = 1; i <= 100; i++) {
System.out.println(Thread.currentThread().getName()+ ":"+i);
}
}
}
public class TestThread {
public static void main(String[] args) {
//3.创建一个子类的对象
SubThread st = new SubThread();
SubThread st1 = new SubThread();
//4.调用线程的start()方法,启动此线程:调用相应的run()方法;
//5.一个线程只能执行依次start();且不能调用run(),如需多次启动start()则需带新建类对象
st.start();
for (int i = 1; i <= 100; i++) {
System.out.println(Thread.currentThread().getName()+ ":"+i);
}
}
}
- 运行输出结果
5. 运行过程为下图的运行过程,然后子线程和主线程谁抢到资源就打印谁
3.通过实现Runnable接口的方式创建多线程
- 实现一个子线程输出1-100到偶数。
- 步骤
1)定义子类,实现Runnable接口。
2)子类中重写Runnable接口中的run方法。
3)通过Thread类含参构造器创建线程对象。
4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法中。
5)调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。 - demo
// 1.创建一个实现了Runnable接口的类
class RunnableClass implements Runnable{
//2.实现接口的抽象方法
@Override
public void run() {
//子线程要执行的代码
for (int i = 1; i <= 100; i++) {
if(i % 2 == 0) {
System.out.println(Thread.currentThread().getName()+ ":"+i);
}
}
}
}
public class TestThread {
public static void main(String[] args) {
//3.创建一个Runnable接口实现类的对象
RunnableClass r = new RunnableClass();
//4.将此对象作为形参传递给Thread类构造器中,创建Thread类的对象,此对象即为一个线程
Thread t = new Thread(r);
//要想启动一个多线程,必须调用start()方法
//5.调用start()方法,启动线程并执行run()
t.start();//启动线程,执行Thread对象生成时构造器形参的run()方法
//再创建一个线程
Thread t2 = new Thread(r);
t2.start();
}
}