Java多线程与并发——死锁与中断线程
过多的同步有可能出现死锁,死锁的操作一般是在程序运行的时候才有可能出现。
多线程中要进行资源的共享,就需要同步,但同步过多,就可能造成死锁。
死锁例子:
package com.vince;
/**
* 线程死锁
* @author acer
*
*/
public class DeadThreadDemo { public static void main(String[] args) {
new DeadThread(); } } //顾客
class Customer{
public synchronized void say(Waiter w){
System.out.println("顾客说,先吃饭在买单");
w.doService();
}
public synchronized void doService(){
System.out.println("同意了,买完单在吃饭");
}
} //服务生
class Waiter{
public synchronized void say(Customer c){
System.out.println("服务员说,先买单在吃饭");
c.doService();
}
public synchronized void doService(){
System.out.println("同意了,吃完饭在买单");
}
} //死锁线程
class DeadThread implements Runnable{
Customer c=new Customer();
Waiter w=new Waiter();
public DeadThread(){
new Thread(this).start();
w.say(c);
}
public void run() {
c.say(w); } }
中断线程例子:
package com.vince; /**
* 中断线程,自定义标记
* @author acer
*
*/
public class ThreadDemo { public static void main(String[] args) {
MyThread mt=new MyThread();
Thread t1=new Thread(mt);
t1.start();
//t1.stop();//停止
for(int i=0;i<10;i++){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
mt.flag=false;
} static class MyThread implements Runnable{
public boolean flag;
public MyThread(){
flag=true;
}
public void run() {
int i=0;
while(flag){
System.out.println("i="+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
i++;
if(i==100) break;//退出循环
}
} }
}
Java多线程与并发——死锁与中断线程的更多相关文章
- “全栈2019”Java多线程第六章:中断线程interrupt()方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java多线程与并发库高级应用-线程池
线程池 线程池的思想 线程池的概念与Executors类的应用 > 创建固定大小的线程池 > 创建缓存线程池 > 创建单一线程池(如何实现线程死掉后重新启动?) 关闭线程池 > ...
- Java 多线程与并发【知识点笔记】
Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...
- JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- [转] JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- JAVA多线程和并发基础面试问答
转载: JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对 ...
- 【多线程】JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- (转)JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- Java多线程和并发基础面试总结
多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.收藏起来,希望给予即将找 ...
随机推荐
- yum配置文件位置
centos的yum配置文件 cat /etc/yum.conf cachedir=/var/cache/yum //yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/ ...
- win7下vs2010开发atl服务
问题一: 编译服务后,提示出下错误 Microsoft.CppCommon.targets(113,5): error MSB3073: 命令 " ***.exe " /RegS ...
- Less:Less(CSS预处理语言)
ylbtech-Less:Less(CSS预处理语言) Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题 ...
- JavaScript-Tool:jquery.cxselect.js
ylbtech-JavaScript-Tool:jquery.cxselect.js 1.返回顶部 1.jquery.cxselect.js /*! * jQuery cxSelect * @name ...
- k8s组件简介
Kubernetes is constructed using several components, as follows:f Kubernetes masterf Kubernetes nodes ...
- 洛谷-跑步-NOI导刊2010提高
新牛到部队, CG 要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上号,A农场为1号, B农场为n号,路口分别为 2 ..n -1 号,从A农场到B农场有很多条路 ...
- 【推荐系统】Netflix 推荐系统:第二部分
原文链接:http://techblog.netflix.com/2012/06/netflix-recommendations-beyond-5-stars.htm 在 blog 的第一部分,我们详 ...
- 一个自动修改本地IP地址的BAT
set /a num1=%random%%%200+1+1 //生成随机数set ip=192.168.1.//ip 主体set ip1=%ip%%num1% //拼接两部分cmd /c netsh ...
- 业务逻辑:完成基于CRM地址完全匹配的自动分单业务逻辑
思路: 后台系统的业务接口服务处理接收到的数据并使用Webservice技术来远程调用CRM系统的业务接口服务来进行定区的查询操作,随后从该定区中匹配一个快递员来分配工单并发送短信通知取件 操作步骤: ...
- [Linux]关于sigprocmask函数的讨论
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...