Java多线程的创建(一)

时间:2023-03-10 07:14:09
Java多线程的创建(一)
  • 方法一:继承Thread类实现

    1.创建一个类A,并继承Thread类

    2.重写A的run()方法

    3.创建A的实例对象b,即创建了线程对象

    4.使用b调用start()方法:启动线程(会自动调用run方法)


例如:

package 多线程;
/*
*1.创建两个线程分别完成100以内奇数偶数的输出
*/ public class CreateThread {
public static void main(String[] args){
Test1 t1 = new Test1();
Test2 t2 = new Test2();
t1.start();
t2.start();
}
}
//输出偶数
class Test1 extends Thread {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (i % 2 == 0) {
System.out.println("线程一输出偶数:"+i);
}
}
}
} //输出奇数
class Test2 extends Thread{
@Override
public void run() {
for(int i =0; i < 50;i++){
if (i %2 != 0) {
System.out.println("线程二输出奇数:"+i);
}
}
}
}
线程一输出偶数:0
线程一输出偶数:2
线程一输出偶数:4
线程二输出奇数:1
线程二输出奇数:3
线程二输出奇数:5
....
线程二输出奇数:47
线程二输出奇数:49
线程一输出偶数:6
线程一输出偶数:8

输出结果省略了一部分,可以看出来,两个线程的执行是交替的,所以奇数和偶数也是交替输出.


  • 方法二:实现Runnable接口

    1. 定义子类A,实现Runnable接口。

    2. 子类中重写Runnable接口中的run方法。

    3. 通过Thread类含参构造器创建线程对象。

    4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。

    5. 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。


例如:

package 多线程;

public class CreateThread2 {
public static void main(String[] args){
Test3 t3 = new Test3();
Test4 t4 = new Test4(); //多态性
Thread t = new Thread(t3);
Thread tt = new Thread(t4);
t.start();
tt.start();
}
}
//输出偶数
class Test3 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (i % 2 == 0) {
System.out.println("线程一输出偶数:"+i);
}
}
}
}
//输出奇数
class Test4 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (i % 2 != 0) {
System.out.println("线程二输出奇数:"+i);
}
}
}
}
//结果和上一个类似
  • 注意事项

    1. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。

    2. run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU 调度决定。

    3. 想要启动多线程,必须调用start方法。

    4. 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将出现异常。

  • 比较两种方法

    1.继承Thread:线程代码存放Thread子类run方法中。

    2.实现Runnable:线程代码存在接口的子类的run方法。

    3.实现方式的好处:

    ​ ①避免了单继承的局限性

    ​ ②多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源

  • 说在最后

    码字不易,感谢支持。水平有限,难免错漏和不准确,欢迎批评指正!