过多的同步有可能出现死锁,死锁的操作一般是在程序运行的时候才有可能出现。

多线程中要进行资源的共享,就需要同步,但同步过多,就可能造成死锁。

死锁例子:

  1. package com.vince;
  2. /**
  3. * 线程死锁
  4. * @author acer
  5. *
  6. */
  7. public class DeadThreadDemo {
  8.  
  9. public static void main(String[] args) {
  10. new DeadThread();
  11.  
  12. }
  13.  
  14. }
  15.  
  16. //顾客
  17. class Customer{
  18. public synchronized void say(Waiter w){
  19. System.out.println("顾客说,先吃饭在买单");
  20. w.doService();
  21. }
  22. public synchronized void doService(){
  23. System.out.println("同意了,买完单在吃饭");
  24. }
  25. }
  26.  
  27. //服务生
  28. class Waiter{
  29. public synchronized void say(Customer c){
  30. System.out.println("服务员说,先买单在吃饭");
  31. c.doService();
  32. }
  33. public synchronized void doService(){
  34. System.out.println("同意了,吃完饭在买单");
  35. }
  36. }
  37.  
  38. //死锁线程
  39. class DeadThread implements Runnable{
  40. Customer c=new Customer();
  41. Waiter w=new Waiter();
  42. public DeadThread(){
  43. new Thread(this).start();
  44. w.say(c);
  45. }
  46. public void run() {
  47. c.say(w);
  48.  
  49. }
  50.  
  51. }

中断线程例子:

  1. package com.vince;
  2.  
  3. /**
  4. * 中断线程,自定义标记
  5. * @author acer
  6. *
  7. */
  8. public class ThreadDemo {
  9.  
  10. public static void main(String[] args) {
  11. MyThread mt=new MyThread();
  12. Thread t1=new Thread(mt);
  13. t1.start();
  14. //t1.stop();//停止
  15. for(int i=0;i<10;i++){
  16. try {
  17. Thread.sleep(500);
  18. } catch (InterruptedException e) {
  19. // TODO 自动生成的 catch 块
  20. e.printStackTrace();
  21. }
  22. }
  23. mt.flag=false;
  24. }
  25.  
  26. static class MyThread implements Runnable{
  27. public boolean flag;
  28. public MyThread(){
  29. flag=true;
  30. }
  31. public void run() {
  32. int i=0;
  33. while(flag){
  34. System.out.println("i="+i);
  35. try {
  36. Thread.sleep(500);
  37. } catch (InterruptedException e) {
  38. // TODO 自动生成的 catch 块
  39. e.printStackTrace();
  40. }
  41. i++;
  42. if(i==100) break;//退出循环
  43. }
  44. }
  45.  
  46. }
  47. }

Java多线程与并发——死锁与中断线程的更多相关文章

  1. “全栈2019”Java多线程第六章:中断线程interrupt()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  2. Java多线程与并发库高级应用-线程池

    线程池 线程池的思想  线程池的概念与Executors类的应用 > 创建固定大小的线程池 > 创建缓存线程池 > 创建单一线程池(如何实现线程死掉后重新启动?) 关闭线程池 > ...

  3. Java 多线程与并发【知识点笔记】

    Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...

  4. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  5. [转] JAVA多线程和并发基础面试问答

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  6. JAVA多线程和并发基础面试问答

    转载: JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对 ...

  7. 【多线程】JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  8. (转)JAVA多线程和并发基础面试问答

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  9. Java多线程和并发基础面试总结

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.收藏起来,希望给予即将找 ...

随机推荐

  1. Python 写文件时的Unicode设置

    今天在把Evenote的笔记内容写为文件时出错:     f.write(content) UnicodeEncodeError: &apos;gbk&apos; codec can& ...

  2. [转]Unity3D学习笔记(四)天空、光晕和迷雾

    原文地址:http://bbs.9ria.com/thread-186942-1-1.html 作者:江湖风云 六年前第一次接触<魔兽世界>的时候,被其绚丽的画面所折服,一个叫做贫瘠之地的 ...

  3. mount error(12): Cannot allocate memory解决办法

    http://hi.baidu.com/zhangbin101004/item/e459f4d1f818dfbd33db903b 今天囧了啊,在ubuntu挂载的文件夹里面解压数据库,结果linux嫌 ...

  4. JVM插庄之一:JVM字节码增强技术介绍及入门示例

    字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术. 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修 ...

  5. 第三课 go语言基础语法

    http://www.runoob.com/go/go-basic-syntax.html 1 行分隔符 在 Go 程序中,一行代表一个语句结束.每个语句不需要像 C 家族中的其它语言一样以分号 ; ...

  6. Python模块-subprocess模块

    Run()方法 >>> a = subprocess.run(['df','-h']) 文件系统 容量 已用 可用 已用% 挂载点 udev 468M 0 468M 0% /dev ...

  7. Java探索之旅(18)——多线程(2)

    1 线程协调 目的对各线程进行控制,保证各自执行的任务有条不紊且有序并行计算.尤其是在共享资源或者数据情况下. 1.1 易变volatile cache技术虽然提高了访问数据的效率,但是有可能导致主存 ...

  8. [nowCoder] 两个长度相同有序数组的中位数

    给定两个有序数组arr1和arr2,两个数组长度都为N,求两个数组中所有数的上中位数.例如:arr1 = {1,2,3,4};arr2 = {3,4,5,6};一共8个数则上中位数是第4个数,所以返回 ...

  9. TCP/IP的3次握手和4次握手

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示. (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等 ...

  10. 10_android打包的过程

    java代码先编译成.class,最后打包成.dex.resources  uncompiled resources:不需要编译的资源:资产目录assets 清单文件 用来标识唯一的安卓应用:签名和包 ...