Java 多线程(一)

进程与线程

操作系统运行一个程序时,会为其创建一个进程,而一个进程又可以创建多个线程,所以线程是操作系统调度的最小单位。进程有独立的地址空间和自己的一整套变量,而线程没有单独的地址空间,但是有自己的堆栈和局部变量,线程之间共享数据。

Java 中多线程实现

Java 中有三种创建多线程的方法:

  1. 通过继承 Thread 类;
  2. 通过实现 Runnable 接口;
  3. 通过 Callable 和 Future 实现;

示例:

继承 Thread 类创建线程

public class ExtendsThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread extends Thread");
    }
}

实现 Runnable 接口创建线程

public class ImplRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println("Thread implements Runnable");
    }
}

启动进程:

public class StartThread {
    public static void main(String[] args) {
        ExtendsThread et = new ExtendsThread();
        et.start();//启动线程

        ImplRunnable r = new ImplRunnable();
        Thread rt = new Thread(r);
        rt.start();//启动线程
        
    }
}

中断线程

当线程的 run 方法执行方法体中最后一条语句后,并经由 return 语句返回后,或者出现方法中没有捕获的异常时,线程将中止。在早期 Java 版本中其他进程可以调用 stop() 方法来中止进程,但是该方法已经被弃用。
没有强制终止线程的方法,但是,interrupted 方法可以用来请求终止进程。每个线程都有一个 boolean 类型的中断状态标志位,调用 interrupted 方法,线程的中断状态将被置位。可以调用静态的 Thread.currentThread 方法获得当前线程,然后调用 isInterrupted 方法来判断该进程的中断状态是否被置位。
但是如果在阻塞进程(wait 或者 sleep)进程上调用 interrupted 方法,将会被 Interrupted Exception 异常中断。

线程状态

线程有如下六种状态

  1. New (新创建)
  2. Runnable (可运行)
  3. Blocked (被阻塞)
  4. Waiting (等待)
  5. Time waiting (计时等待)
  6. Terminated (被终止)

New:new 操作符新建一个进程时,意味着它的状态位 New。
Runnable:一旦调用 start() 方法,线程就处于 Runnable 状态。一个 Runnable 状态的进程可能正在运行,也有可能没有运行,取决于操作系统。
Blocked ,Waiting & Time waitting:当进程处于 Blocked ,Waiting 和 Time waiting 状态时,它不运行任何代码且消耗最少的资源。线程会因为如下原因被阻塞或等待:

  1. 当一个线程试图获得另一个内部的对象锁,而该锁被其他进程持有,则该进程进入阻塞状态;
  2. 当一个线程等待另一个线程通知调度器一个条件时,它将进入等待状态 ;
  3. 调用具有超时参数的方法进入计时等待状态(Time waiting)

在这里插入图片描述
Terminated:线程会因为如下两个原因而被终止:

  1. run 方法正常退出;
  2. 因为一个没有捕获的异常而终止 run 方法而被终止;

参考资料:

  1. 《Java 核心技术 卷1》
  2. https://blog.csdn.net/javazejian/article/details/50878598
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值