Java Thread Api

java锁的理解:https://www.cnblogs.com/dolphin0520/p/3923167.html

  Thread join (millis)  当前线程等待目标线程死亡或收到中断信号,最多等待millis,millis为0 表示一直等到目标死亡。网上有的地方说需要两个线程是父子关系,是错误的。代码如下:

public class Test {
    public static void main(String[]args)
    {
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    Thread.sleep(100);
                }catch (InterruptedException e){
                }finally {
                }
                System.out.println("thread 1 done");
            }
        });
        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    thread1.join();
//                    thread1.join(10);
                }catch (InterruptedException e){
                }finally {
                }
                System.out.println("thread 2 done");
            }
        });
        thread2.start();
        thread1.start();
    }
}

结果:

thread 1 done
thread 2 done 

如果join方法传入参数是10,那么结果会是

thread 2 done
thread 1 done

yield方法:当前线程愿意让出cpu的使用权,但是调度器不保证一定会执行这个意愿。

可以在循环中使用,需要指定一个循环条件:

while (Thread.activeCount()>2)
            Thread.yield();

setDaemon(boolean)设置线程是否是守护线程,必须在start之前调用。守护线程的优先级比较低。

java中线程分为用户线程和守护线程。一个线程默认是用户线程。 当所有用户线程都结束(不准确,下面文档上描述的是running)后,JVM就会退出exits。GC线程是一个守护线程。如果有一个以上的线程处于运行状态,JVM不会退出。

守护线程可以用来处理某些周期性任务,或者响应某些事件。(我没有实际应用过)

* Marks this thread as either a {@linkplain #isDaemon daemon} thread
     * or a user thread. The Java Virtual Machine exits when the only
     * threads running are all daemon threads.

 示例链接: https://www.cnblogs.com/shangxiaofei/p/8118813.html

interrupt, isInterrupted

java的线程中断是一种中断信号。它不会结束线程,而是标记一个中断状态(isInterrupted)或者抛出一个中断异常(InterruptedException)。如果线程阻塞在sleep、join等函数上,那么它会受到一个异常,同时中断状态会被清除,否则只标记了一个异常状态,没有清除。

io读写、获取锁不会被中断。lockInterruptibly 、tryLock方法尝试获取锁可以接受中断消息。

中断线程可以把被中断的线程从阻塞状态移开,由它自己决定要做什么,一个线程在受到中断消息之后(isInterrupted 或 InterruptedException)如何处理中断逻辑,是由他自己决定的。

一篇关于java线程中断的链接,有详细的例子:https://blog.csdn.net/sunxing007/article/details/9123363

java不推荐使用线程挂起和唤醒。

原文地址:https://www.cnblogs.com/afraidToForget/p/10123066.html