Python统计列表中的重复项出现的次数(伪原创)
2011-09-01 15:43
591 查看
synchronized 特点: 两个synchronized 方法,当一个线程已经获取锁定,其它线程就不能再执行同一实例的synchronized 方法.
非synchronized 方法可以执行.
下面开始模拟死锁现象
结果:
apq抱着匙子不放,bob抱着叉子不放,谁也不能吃了
apq 左手拿了 [ 匙子 ]
apq 右手拿了 [ 叉子 ]
吃...
apq 左手拿了 [ 匙子 ]
bob 左手拿了 [ 叉子 ]
把锁的粒度加大些,可以避免死锁
非synchronized 方法可以执行.
下面开始模拟死锁现象
package com.apq.deadlock; //餐具类 class Tableware { private final String name; public Tableware(String name) { this.name = name; } public String toString() { return " [ " + name + " ] "; } } class EaterThread extends Thread { private String name; private final Tableware lefthand; private final Tableware righthand; public EaterThread(String name, Tableware spoon, Tableware fork) { this.name = name; this.lefthand = spoon; this.righthand = fork; } public void run() { while (true) { this.eat(); } } private void eat() { synchronized (this.lefthand) { System.out.println(this.name + " 左手拿了 " + this.lefthand); synchronized (this.righthand) { System.out.println(this.name + " 右手拿了 " + this.righthand); System.out.println("吃..."); } } } } public class Main { public static void main(String[] args) { Tableware spoon = new Tableware("匙子"); Tableware fork = new Tableware("叉子"); new EaterThread("apq", spoon, fork).start(); new EaterThread("bob", fork, spoon).start(); } }
结果:
apq抱着匙子不放,bob抱着叉子不放,谁也不能吃了
apq 左手拿了 [ 匙子 ]
apq 右手拿了 [ 叉子 ]
吃...
apq 左手拿了 [ 匙子 ]
bob 左手拿了 [ 叉子 ]
把锁的粒度加大些,可以避免死锁
package com.apq.deadlock; //餐具类 class Tableware { private final String name; public Tableware(String name) { this.name = name; } public String toString() { return " [ " + name + " ] "; } } class Pair { private final Tableware lefthand; private final Tableware righthand; public Pair(Tableware spoon, Tableware fork) { this.lefthand = spoon; this.righthand = fork; } public String toString() { return "Pair [lefthand=" + lefthand + ", righthand=" + righthand + "]"; } } class EaterThread extends Thread { private String name; private final Pair pair; public EaterThread(String name, Pair pair) { this.name = name; this.pair = pair; } public void run() { while (true) { this.eat(); } } private void eat() { synchronized (this.pair) { System.out.println(this.name + " 拿了 " + this.pair); System.out.println("吃..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class Main1 { public static void main(String[] args) { Tableware spoon = new Tableware("匙子"); Tableware fork = new Tableware("叉子"); Pair pair = new Pair(spoon, fork); new EaterThread("apq", pair).start(); new EaterThread("bob", pair).start(); } }
相关文章推荐
- Python统计列表中的重复项出现的次数的方法
- Python统计列表中的重复项出现的次数的方法
- Python统计列表(List)中的重复项出现的次数并进行排序
- Python监控CPU统计列表中的重复项出现的次数
- Python统计列表中的重复项出现的次数的方法
- Python统计列表中的重复项出现的次数的方法
- Python统计列表中的重复项出现的次数的方法
- Python统计列表中的重复项出现的次数的方法
- Python统计列表中的重复项出现的次数的方法
- Python统计列表中的重复项出现的次数的方法
- Python统计列表中的重复项出现的次数的方法
- 学python(04)——统计列表中所有数据出现的次数
- python---统计列表中数字出现的次数
- Python实现统计给定列表中指定数字出现次数的方法
- Python统计列表中元素出现的次数
- Python统计列表元素出现次数
- python 统计列表中各元素出现的次数
- 去除数组中重复项,并统计重复出现次数最多的元素及重复次数
- Python 列表count()函数元素次数统计
- 利用python内置函数,快速统计单词在文本中出现的次数