资讯专栏INFORMATION COLUMN

线程系列一、线程的创建与停止

BlackHole1 / 2359人阅读

摘要:接口接口允许我们在线程执行的时候有返回值,以及抛出异常线程的停止类中的个停止方法三者区别将线程标记为中断返回线程当前的中断状态,不清除线程的中断标记返回线程当前的中断状态,并清除线程的中断标记与本质都是调用了的。

1、通过继承Thread类

public static class MThread extends Thread{

    @Override
    public void run() {
        System.out.println(this.getName() + " start");
    }
}

public static void main(String[] args){
    new MThread().start();
}

2、通过实现Runnable接口实现

public static class MRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() +" start");
    }
}

public static void main(String[] args){
    new Thread(new MRunnable()).start();
}

3、创建可抛异常且有返回值的线程任务

public static class MCallAble implements Callable {
    @Override
    public String call() throws Exception {
        return Thread.currentThread().getName() + " 测试";
    }
}

public static void main(String[] args) throws ExecutionException, InterruptedException {
    FutureTask task = new FutureTask<>(new MCallAble());
    Thread thread = new Thread(task);
    thread.start();
    System.out.println(task.get());
}

解释:

1、FutureTask的继承类图

因为FutureTask最终实现的是Runnable接口,因此FutureTask可以直接放在Thread中执行。

2、Callable接口

Callable接口允许我们在线程执行的时候有返回值,以及抛出异常!

4、线程的停止

①Thread类中的3个停止方法:

public void interrupt()
public static boolean interrupted()
public boolean isInterrupted()

②三者区别:

public void interrupt()

将线程标记为中断

public boolean isInterrupted() {
    return isInterrupted(false);
}

返回线程当前的中断状态,不清除线程的中断标记

public static boolean interrupted() {
    return currentThread().isInterrupted(true);
}

返回线程当前的中断状态,并清除线程的中断标记

interrupted() 与 isInterrupted() 本质都是调用了 native的 isInterrupted()。interrupted()清除了标记, isInterrupted()不清楚标记。

③中断示例代码

static class Mclass implements Runnable {
    @Override
    public void run() {
        while (!Thread.interrupted()) {
            System.out.println(Thread.currentThread().getName() + " start ");
        }
    }
}

public static void main(String[] args) {
    Thread thread1 = new Thread(new Mclass());
    Thread thread2 = new Thread(new Mclass());
    thread1.start();
    thread2.start();
    thread1.interrupt();
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76681.html

相关文章

  • Java多线程学习()Java多线程入门

    摘要:最近听很多面试的小伙伴说,网上往往是一篇一篇的多线程的文章,除了书籍没有什么学习多线程的一系列文章。将此线程标记为线程或用户线程。 最近听很多面试的小伙伴说,网上往往是一篇一篇的Java多线程的文章,除了书籍没有什么学习多线程的一系列文章。但是仅仅凭借一两篇文章很难对多线程有系统的学习,而且面试的时候多线程这方面的知识往往也是考察的重点,所以考虑之下决定写一系列关于Java多线程的文章...

    Donne 评论0 收藏0
  • 线程学习笔记(2):多线程基础

    摘要:和方法用来设置线程是否成为守护线程和判断线程是否是守护线程。守护线程依赖于创建它的线程,随它的消亡而消亡。使用提供的方法,提醒线程终止,但是否真正终止由线程自己决定。参考实战高并发程序设计多线程干货系列一多线程基础 一、如何创建多线程 1、继承Thread类 public class MyThread extends Thread { @Override public ...

    HelKyle 评论0 收藏0
  • Akka系列(六):Actor解决了什么问题?

    摘要:原文链接解决了什么问题使用模型来克服传统面向对象编程模型的局限性,并应对高并发分布式系统所带来的挑战。在某些情况,这个问题可能会变得更糟糕,工作线程发生了错误但是其自身却无法恢复。 这段时间由于忙毕业前前后后的事情,拖更了很久,表示非常抱歉,回归后的第一篇文章主要是看到了Akka最新文档中写的What problems does the actor model solve?,阅读完后觉...

    Carson 评论0 收藏0
  • 0011 - YARN核心设计解析

    摘要:包括等,它们共同维护了一个事件与事件处理器的映射表,用来处理各个事件。例如内部包含一个中央异步调度器,并注册了等一系列事件事件处理器,由中央异步调度器统一管理和调度。当状态机转换到最终状态时,则退出。 大数据梦工厂( 0011 - YARN核心设计解析)1 - YARN RPC架构设计YARN RPC Serv...

    KoreyLee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<