zoukankan      html  css  js  c++  java
  • JAVA多线程--Thinking in java

    聊聊并发:http://ifeve.com/java-concurrency-thread-directory/

    阻塞状态:

    sleep  可中断利用 interrupt方法

    wait

    IO  不可中断   I:关闭底层资源  II:new I O

    任务试图在某个对象上调用其同步控制方法,但是对象锁被另一个任务获取  syn不可中断   lock.lockInterruptibly()  可以中断


    Executor.shutdownNow() 发送一个interrupt() 调用给它启动的所有线程 

    如何中断单一任务?

    Executor.submit()启动单一任务 该方法返回一个Futrue<?> 类型的参数

    利用这个参数的cancel(true)即相当于在该线程上调用interrupt() 


    public static void main(String[]args){
            final Test st = new Test();
            new Thread(){
                @Override
                public void run(){
                    st.f1(100);
                }
            }.start();
            System.out.println("main is over");
        }
    }

    刚才写测试用例 突然发现自己对有些概念不是特别明确 比如上面的例子  

    我原以为 main线程输出完那句话 整个程序就结束了 其实并非这样

    只有当把副线程设置为守护线程的时候 才是我想象的那样


    如果在线程上调用interrupt方法停止某个任务 那么在run循环碰巧没有产生任何阻塞的情况下 任务无法中断 

    1可以调用interrupted检查中断状态  while(!Thread.interrupted())


    wait方法

    I带毫秒数,在wait期间对象锁是释放的 可以通过notify notifyall释放 或者时间到期 从wait中恢复 

    II不带参数 wait无限期等待下去

    调用wait notify notifyall 的方法必须在同步控制方法或者同步控制块里


    死锁的四个条件:

    1互斥条件。任务使用的资源至少有一个是不能共享的

    2至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源。

    3资源不能被任务抢占

    4必须有循环等待

  • 相关阅读:
    HTTP学习三:HTTPS
    JavaScript判断变量的类型
    用JS创建10个<a>标签,点击的时候弹出来对应的序号
    【工具】根据后端提供的swagger生成前端的axios请求配置文件/api
    JavaScript正则表达式-零宽断言
    JavaScript中数组去重、对象去重的方法
    收集的无版权图片网站(欢迎补充)
    css 清除浮动
    JavaScript+CSS+HTML 编写手风琴效果
    Mac定制终端:iTerm2 + zsh + powerline
  • 原文地址:https://www.cnblogs.com/luyu1993/p/6985788.html
Copyright © 2011-2022 走看看