zoukankan      html  css  js  c++  java
  • 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不推荐使用线程挂起和唤醒。

  • 相关阅读:
    springboot新手脱坑之无法下载依赖包
    07_mybatis延迟加载
    05_mybatis动态sql
    04_Mybatis输入出映射
    C#-----类FileStream的使用
    JavaWeb-----JSP详解
    JavaWeb-----ServletConfig对象和servletContext对象
    JavaWeb-----实现第一个Servlet程序
    JavaScript--浅谈!=、!==、==和===的区别
    EasyUI学习-----表格DataGrid格式化formatter用法
  • 原文地址:https://www.cnblogs.com/afraidToForget/p/10123066.html
Copyright © 2011-2022 走看看