Java的线程学习笔记(一)

一、线程概述以及Java的线程模型
    线程是程序执行流的最小单位。
    每个线程都是作为利用CPU的基本单位。
    每个JAVA应用程序都至少有一个线程—主线程。当一个JAVA应用程序启动时,JVM会创建主线程,并在该线程中调用程序的main()方法。
    
    多线程与多进程的区别。
    多线程是多进程的细化更深入一步。
    通常在一个进程中可以包含多个线程,它们可以利用进程拥有的资源。
    
    Java语言中,多线程的机制是通过虚拟CPU来实现的。可以形象地理解为,在一个Java程序内部虚拟了多台计算机,每台计算机对应一个线程,有自己的CPU。
    每个Java应用程序都至少有一个线程,这就是所谓的主线程。它由JVM创建并调用Java应用程序main()方法。
    JVM还通常会创建一些其他的线程,这些都是对我们不可见的。比如自动垃圾收集的线程,对象终止或者其他的与JVM处理任务相关的线程。

二、创建线程

创建线程的三种方法

1、建立一个类继承自Thread,重写父类的run()方法,并在里面编写逻辑。

代码如下:

class myThread extends Thread{
@Override
public void run()
{
//处理具体的逻辑
}

}

其中方法run()称为线程体。

创建该类的实例并对其使用start()方法可使其进入Runnable(可运行)状态。示例:new myThread().start();

调用start()方法并不一定马上会执行这个线程,只是进入Runnable而非Running状态。

注意:不要直接在程序中调用线程的run方法。因为可能存在线程等待的情况。直接调用容易造成死锁。

2、实现Runnable接口创建线程。

class myThread implements Runnable{

@Override
public void run()
{
//处理具体逻辑

}
}

启动方法:new Thread(new myThread()).start();

3、匿名内部类

new Thread(new Runnable(){

//具体逻辑

}).start();

三、后台线程概念。

在后台运行,为其他的线程提供服务。典型:定时器(Timer)

后台线程常用于任务结束时的善后处理。后台线程的优先级要比其他线程低。

和后台线程相对的其他线程,一般被称为用户线程。如果一个应用中只有后台线程在运行,JVM将退出该应用程序。

可以通过setDaemon(boolean true)将一个普通线程设置为后台线程。用方法isDaemon()可以测定特定的线程是否为后台线程。

public class DaemonThread extends Thread{
public void run()
{
while(true)
{
System.out.println("Daemon thread running");
}
}
public static void main(String agrs[]){
DaemonThread dh=new DaemonThread();
dh.setDaemon(true);//1
dh.start();
}
}

上面的程序运行一段时间后会自动退出,而删去//1这行之后就不会自动退出。

猜你喜欢

转载自blog.csdn.net/qq_41105058/article/details/81081621