线程意味着什么,线程是什么课程里的

首页 > 数码 > 作者:YD1662024-06-17 09:31:53

Java 线程实现

下面讲一讲在 Java 中如何创建一个线程。众所周知,实现 Java 线程有 2 种方式:继承 Thread 类和实现 Runnable 接口。

继承 Thread 类

继承 Thread 类,重写 run 方法。

class MyThread extends Thread {

@Override
public void run {
System.out.println("MyThread");
}

}

实现 Runnable 接口

实现 Runnable 接口,实现 run 方法。

class MyRunnable implements Runnable {

public void run {
System.out.println("MyRunnable");
}

}

这 2 种线程的启动方式也不一样。MyThread 是一个线程类,所以可以直接 new 出一个对象出来,接着调用 start 方法来启动线程;而 MyRunnable 只是一个普通的类,需要 new 出线程基类 Thread 对象,将 MyRunnable 对象传进去。

下面是启动线程的方式。

public class ThreadImpl {

public static void main(String[] args) {
MyThread myThread = new MyThread;
Thread myRunnable = new Thread(new MyRunnable);
System.out.println("main Thread begin");
myThread.start;
myRunnable.start;
System.out.println("main Thread end");
}

}

打印结果如下:

main Thread begin
main Thread end
MyThread
MyRunnable

看这结果,不像咱们之前的串行执行依次打印,主线程不会等待子线程执行完。

敲重点:不能直接调用 run,直接调用 run 不会创建线程,而是主线程直接执行 run 的内容,相当于执行普通函数。这时就是串行执行的。看下面代码。

public class ThreadImpl {

public static void main(String[] args) {
MyThread myThread = new MyThread;
Thread myRunnable = new Thread(new MyRunnable);
System.out.println("main Thread begin");
myThread.run;
myRunnable.run;
System.out.println("main Thread end");
}

}

打印结果:

main Thread begin
MyThread
MyRunnable
main Thread end

从结果看出只是串行的,但看不出没有线程,我们看下面例子来验证直接调用 run 方法没有创建新的线程,使用 VisualVM 工具来观察线程情况。

我们对代码做一下修改,加上 Thread.sleep(1000000) 让它睡眠一段时间,这样方便用工具查看线程情况。

调用 run 的代码:

public class ThreadImpl {

public static void main(String[] args) {
MyThread myThread = new MyThread;
myThread.setName("MyThread");
Thread myRunnable = new Thread(new MyRunnable);
myRunnable.setName("MyRunnable");
System.out.println("main Thread begin");
myThread.run;
myRunnable.run;
System.out.println("main Thread end");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace;
}
}

}

class MyThread extends Thread {

@Override
public void run {
System.out.println("MyThread");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace;
}
}

}

class MyRunnable implements Runnable {

public void run {
System.out.println("MyRunnable");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace;
}
}

}

运行结果:

main Thread begin
MyThread

线程意味着什么,线程是什么课程里的(9)

只打印出 2 句日志,观察线程时也只看到 main 线程,没有看到 MyThread 和 MyRunnable 线程,印证了上面咱们说的:直接调用 run 方法,没有创建线程。

下面我们来看看有

调用 start 的代码:

public class ThreadImpl {

public static void main(String[] args) {
MyThread myThread = new MyThread;
myThread.setName("MyThread");
Thread myRunnable = new Thread(new MyRunnable);
myRunnable.setName("MyRunnable");
System.out.println("main Thread begin");
myThread.start;
myRunnable.start;
System.out.println("main Thread end");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace;
}
}

}

运行结果:

main Thread begin
main Thread end
MyThread
MyRunnable

线程意味着什么,线程是什么课程里的(10)

所有日志都打印出来了,并且通过 VisualVM 工具可以看到 MyThread 和 MyRunnable 线程。看到了这个结果,切记创建线程要调用 start 方法。

声明:本文为 CSDN 博主「LieBrother」的原创文章,版权归作者所有。

线程意味着什么,线程是什么课程里的(11)

线程意味着什么,线程是什么课程里的(12)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.