<JAVA学习笔记6>——程序死锁、中断
来源:互联网 发布:mac怎么删除abc输入法 编辑:程序博客网 时间:2024/06/05 16:09
1、程序死锁
过多的同步有可能出现死锁,死锁的操作一般在程序运行的时候才有可能出现。
多线程要进行资源的共享,就需要同步,但同步过多,就可能造成死锁。
程序中出现死锁的一般原因就是在当前的同步方法中调用了其它对象的同步方法, 在我们编程时要注意避免这样写 。死锁的发生的是不确定性的!
下面用一个程序演示,但不一定会这样写。
package com.xiaofeng.example;/** * 死锁 * @author XiaoFeng1015 */public class ThreadDemo3 { 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); } @Override public void run() { c.say(w); }}
运行结果:
2、程序中断
停止一个线程,目前一些destroy()方法已经过时,可以使用中断的方式停止程序。
在停止一个程序时,也需要一些准备工作。
package com.xiaofeng.example;public class TheadDemo4 { public static void main(String[] args) throws InterruptedException { MyThread my = new MyThread(); Thread t1 = new Thread(my); t1.start(); for (int i = 0; i < 10; i++) { Thread.sleep(500); } // 当i=10;时,设置flag为false,中断程序执行 my.flag = false; } static class MyThread implements Runnable { // 用flag做中断标记 public boolean flag; public MyThread() { flag = true; } @Override public void run() { int i = 0; while (flag) { System.out.println("i=" + i); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } i++; } } }}
执行结果:
未完持续…….
期待和大家的交流,谢谢喽!!
0 0
- <JAVA学习笔记6>——程序死锁、中断
- 第6章:中断和中断处理程序--学习笔记
- 学习笔记——JAVA线程<5>线程的死锁
- 《Linux内核设计与实现》学习笔记——中断、中断处理程序
- java多线程学习笔记(2)——中断线程
- 操作系统之死锁——学习笔记
- Java学习笔记——面试常客:写出一个死锁的例子
- java多线程学习笔记(五) ——死锁与饿汉式懒汉式
- 汇编--学习笔记(十三)-中断及中断处理程序
- Java 线程同步与死锁 学习笔记
- STM32F407学习笔记——Systick中断
- FreeRTOS学习笔记——SysTick中断
- STM32学习笔记——中断
- STM32F103学习笔记——外部中断
- 学习笔记——同步、通信与死锁(1)
- 学习笔记——同步、通信与死锁(2)
- OS学习笔记——进程同步与死锁1
- Java并发——线程中断学习
- Emacs入门笔记
- 《剑指offer》:[48]不能被继承的类-单例模式
- 使用 ResultSet 遍历查询结果String getString(int columnIndex)
- 翻转课堂心得
- bzoj1191(最大匹配,但不完全一样)
- <JAVA学习笔记6>——程序死锁、中断
- nginx之keepalive请求长连接复用率统计
- C语言基础 swtich结构中变量是字符,case的形式
- 观察者模式下的搜索引擎结合浏览器的完美实现
- JZOJ2756. 【SDOI2012】Longge的问题
- 218 .The Skyline Problem
- Python 包管理工具解惑
- 23. Merge k Sorted Lists 合并K个有序链表
- MySQL的CAST函数用法