美文网首页
Thread线程的理解

Thread线程的理解

作者: chase_ | 来源:发表于2019-02-23 17:10 被阅读0次

sleep()方法

该方法是让线程睡眠,注意睡眠的线程是当前执行的线程,如下代码,睡眠的是main线程,不是t1线程,如果要让t1睡眠,sleep的位置应该是在A線程裏面的run()方法,并且sleep是静态方法,调用不应该用实例调用,应该是Thread.sleep(),别让t1.sleep()的方法误导,误以为是t1线程睡眠。

package com.xxl.rpc.test;

public class Interrupt {


    public static void main(String[] args) {
        A a = new A();
        Thread t1 = new Thread(a);
        t1.start();
        System.out.println("执行睡眠之前2:" + t1.isInterrupted());
        try {
            t1.sleep(2000);//线程进入阻塞状态
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(123);
    }
}

class A implements Runnable {

    @Override
    public void run() {
        long now = System.currentTimeMillis();
        boolean flag = true;
        while (System.currentTimeMillis() - now < 1000) {
            System.out.println(222);
        }
    }
}



线程的中断

主要涉及到三个方法,如下
1.public void interrupt():中断该线程
2.public static boolean interrupted() 返回该线程的中断状态,并清除中断状态,该方法其实是调用了另一个中断方法private native boolean isInterrupted(boolean ClearInterrupted),ClearInterrupted为ture,标识清楚中断标志。
3.public boolean isInterrupted() {
return isInterrupted(false);
}返回线程的中断状态,但是不清楚中断状态。

线程的中断是会唤醒sleep、wait、join中的线程,也就是说会让这些方法抛出InterruptedException异常,从而唤醒线程,如下代码

package com.xxl.rpc.test;

public class Interrupt {


    public static void main(String[] args) {
        Thread b = new B();
        b.start();
        b.interrupt();
    }
}

class B extends Thread {

    @Override
    public void run() {
        System.out.println("do something");
        try {
            System.out.println("线程中断状态"+this.isInterrupted());
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            //false说明抛出异常导致中断状态被清除
            System.out.println("线程中断状态"+this.isInterrupted());
            System.out.println("中断抛出的异常");
            //do something else
        }

    }
}

执行结果如下:
do something
线程中断状态true
线程中断状态false
中断抛出的异常

Process finished with exit code 0

相关文章

  • Thread

    线程机制理解开启线程: Thread thread = new Thread(Runnable).start();...

  • Thread线程的理解

    sleep()方法 该方法是让线程睡眠,注意睡眠的线程是当前执行的线程,如下代码,睡眠的是main线程,不是t1线...

  • 如何快速理解CUDA GPU并行编程?

    理解线程(Thread)、线程块(Block)、网格(Grid),线程块数(BlockDim)、网格数(GridD...

  • Android线程管理(一)——线程通信

    线程通信、ActivityThread及Thread类是理解Android线程管理的关键。 线程,作为CPU调度资...

  • 一文读懂Thread与Runnable的关系

    本文是笔者对Thread与Runnable的理解,如有理解错误的地方,欢迎大家指正。 Thread是线程,Runn...

  • 理解Python线程Thread

    Demo代码和引用知识点都参考自 《理解Python并发编程一篇就够了 - 线程篇》--董伟明 或作者个人公众号P...

  • (二)Thread类

    Java多线程目录 介绍 从上文中我们知道开启一个线程需要使用Thread类,自我理解Thread类是一个线程的控...

  • 我所理解的多线程

    我所理解的多线程。 new Thread(new Runnable() { @Override public ...

  • Java线程间通信的原理和机制

    1.线程间通信 1.1.thread.interrupt()   我们理解的可能就是线程和线程之间对话。   最简...

  • 线程协程WWW

    线程:Thread // 新线程-1 调用静态方法 Thread m_Thread_1 = new Thread(...

网友评论

      本文标题:Thread线程的理解

      本文链接:https://www.haomeiwen.com/subject/qkmpyqtx.html