Home > Java > javaTutorial > What is the difference between Java thread interruption and blocking? Comparison of Java thread interruption and blocking

What is the difference between Java thread interruption and blocking? Comparison of Java thread interruption and blocking

不言
Release: 2018-09-15 16:51:06
Original
2671 people have browsed it

What this article brings to you is what is the difference between Java thread interruption and blocking? The comparison between Java thread interruption and blocking has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Many Java developers (including me), especially novices who have just entered the software industry, think that setting thread interruption in Java means that the thread has stopped and will not execute forward.

Thread.currentThread().interrupt()

Actually, this is not the case. Thread interruption is just a state. true means it has been interrupted, false means it has not been interrupted.

//Get the thread interruption status, if Returns true if interrupted, otherwise returns false
Thread.currentThread().isInterrupted()
Setting the thread interrupt does not affect the continued execution of the thread, but after the thread sets the interrupt, the wait, jion, and sleep methods are called in the thread. A method that immediately throws an InterruptedException, and the interrupt flag is cleared and reset to false.

class Thread2 implements Runnable{

    @Override
    public void run() {
        try {
            System.out.println();
            System.out.println(hread.currentThread().isInterrupted());//输出false
            Thread.currentThread().interrupt();//当前线程中断
            System.out.println("Thread.currentThread().isInterrupted());//输出true
            Thread.sleep(3000);//中断后执行sleep会抛出异常
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("Thread.currentThread().isInterrupted());//输出false
        }
       
    }
}
Copy after login

How to make the thread really stop and not execute forward:
To really make the thread stop (block), Java provides a relatively low-level concurrency Tool class: LockSupport, there are two commonly used methods in this class, 1

park(Object blocker) means blocking the specified thread, the parameter blocker is the current thread object 2 unpark(Thread thread) wakes up the specified thread, the parameter thread specifies the thread Object
Example:

 public void test_LockSupport(){
      Thread thread=new Thread(new Thread_park());
      thread.start();//阻塞当前线程
      Thread thread2=new Thread(new Thread_unpark(thread));
      thread2.start();//唤醒被阻塞的线程
  }

  class Thread_park implements  Runnable{
    @Override
    public void run() {
        System.out.println("Thread_park开始");
        LockSupport.park(this);//阻塞当前线程
        System.out.println("Thread_park结束");
     }
  }

 class Thread_unpark implements  Runnable{
    private Thread thread;

    public Thread_unpark(Thread thread) {
        this.thread = thread;
    }

    @Override
    public void run() {
        System.out.println("Thread_unpark开始");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LockSupport.unpark(thread);//唤醒被阻塞的线程
        System.out.println("Thread_unpark结束");
    }
}
Copy after login

Related recommendations:

Detailed explanation of thread blocking usage of LockSupport class in Java multi-thread programming

Sample code for multi-thread blocking and wake-up in Java

The above is the detailed content of What is the difference between Java thread interruption and blocking? Comparison of Java thread interruption and blocking. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template