Java线程简单复习
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本篇文章主要为对Java多线程基础部分的复习,内容不多,均为整理归纳。
提示:以下是本篇文章正文内容
一、什么是线程?
线程就是进程中一个独立的控制单元,又称程序的最小执行单位,线程在控制着进程的执行,一个进程中至少有一个线程。线程表示一条单独的执行流,它有自己的程序执行计数器,有自己的栈。
二、实现线程
1.继承Thread
Java中java.lang.Thread这个类表示线程,一个类可以继承Thread并重写其run方法来实现一个线程:
//集成java.lang.Thread类
public class helloThread extend Thread(){
//实现run方法
@Override
public viod run(){
System.out.println("hello");
}
}
run方法类似于单线程程序中的main方法,线程从run方法的第一条语句开始执行直到结束。
定义了这个类不代表代码就会开始执行,线程需要被启动,启动需要先创建一个HelloThread对象,然后调用Thread的start方法,如下所示:
public static void main(String[] args){
Thread thread = new helloThread();
thread.start();
}
调用start方法后,HelloThread的run方法就会开始执行,屏幕输出"hello".
start表示启动该线程,使其成为一条单独的执行流,背后,操作系统会分配线程相关的资源,每个线程会有单独的程序执行计数器和栈,操作系统会把这个线程作为一个独立的个体进行调度,分配时间片让它执行,执行的起点就是run方法。
如果不调用start,而直接调用run方法呢?屏幕的输出并不会发生变化,但并不会启动一条单独的执行流,run方法的代码依然是在main线程中执行的,run方法只是main方法调用的一个普通方法。
如何确认代码是在哪个线程中执行的呢?Thread有一个静态方法currentThread,返回当前执行的线程对象,每个Thread对象都有一个id和name:
public class helloThread extend Thread(){
//实现run方法
@Override
public viod run(){
System.out.println("hello");
System.out.println("helloThreadName:"+helloThread.currentThread().getName());
}
}
2.实现Runnable接口
通过继承Thread来实现线程虽然比较简单,但我们知道,Java中只支持单继承,每个类最多只能有一个父类,如果类已经有父类了,就不能再继承Thread,这时,可以通过实现java.lang.Runnable接口来实现线程。
Runnable接口的定义很简单,只有一个run方法,如下所示:
public interface Runnable{
oublic abstract void run();
}
但是仅仅实现Runzble是不够的,要启用线程,还是要创建一个Thread对象,传一个Runnable对象即可。