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必须有循环等待

 

转载于:https://www.cnblogs.com/luyu1993/p/6985788.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值