- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码在SCJP6书上
class ThreadA {
public static void main(String [] args) {
ThreadB b = new ThreadB();
b.start();
synchronized(b) {
try {
System.out.println("Waiting for b to complete...");
b.wait();
} catch (InterruptedException e) {}
System.out.println("Total is: " + b.total);
}
}
}
class ThreadB extends Thread {
int total;
public void run() {
synchronized(this) {
for(int i=0;i<100;i++) {
total += i;
}
notify();
}
}
}
前面的代码会不会导致死锁,因为线程 a 和 b 都锁定了 b(在各自的同步块(synchronized block)中)?
我遗漏了一些东西,但不太确定是什么。
最佳答案
最有可能的执行如下:
b.start()
和正在执行的 run
方法之间有轻微的延迟b
上的锁并进入了synchronized
block b
(释放锁)run
开始执行时,监视器可用(或很快可用),因此它可以进入 synchronized
block b
它可以停止等待但是,根据线程调度,run
并非不可能首先执行,在这种情况下,主线程可能会永远等待 b.wait()
。例如,如果您通过在 b.start()
之后插入一个小的 Thread.sleep(100)
来帮助解决这种情况,您应该观察到这种行为。
底线:这是一个可能会遇到 active 问题的臭代码(它本身不是死锁,因为锁是可用的)。
关于java - 从 SCJP 6 书中了解多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701930/
我之前遇到的关于 SO 的问题已经将近 2 年了。 我刚刚为 SCJP 6 购买了 Kathy Sierra 和 Bert Bates 的书。但它发生了,所以现在在我阅读博客时,我听说 SCJP“PL
嗨,我无法理解为什么输出是 'ex [6, 7, b, d] [6, 7, b]' 这段代码。请有人建议子集如何与 数字和字母?谢谢 import java.util.*; public class
在调试java多线程程序时,我设置了断点。在启动方法调用后,控件将不会运行menthod,您可以让我知道调试过程吗? 示例代码 class Test extends Thread { publ
public class Hotel { private int roomNr; public Hotel(int roomNr) { this.roomNr = ro
下面将因“标签 z 丢失”而编译失败,但如果我只是将 z: 移动到 o = o + 2 之后的下面一步,那么这会起作用吗?这背后的逻辑是什么? public class Breaker { stati
考虑: class Building { Building() { System.out.print("b "); } Building(String name
public class Starter extends Thread{ private int x = 2; public static void main(String[]
给出下面的代码。该代码由“java Test 1 2 3 4”运行。结果是什么? public class Test { public static void main(String args[])
另一个让我困惑的考试问题: public String makinStrings() { String s = “Fred”; s = s + “47”; s = s.substring(2,
我在理解 K&B 的 SCJP 书中《面向对象》一章中的问题 9 时遇到问题。 问题: public class Redwood extends Tree { public static void m
即使得到正确答案,我也无法弄清楚 SCJP 问题: 从以下代码(来源:http://scjptest.com)中,我们需要确定何时引用为 myInt 的对象符合垃圾回收条件: 01.public vo
给定: public class LineUp { public static void main(String[] args) { double d = 12.345;
只是想知道 SUN 是否提供任何可用于 SCJP 的好东西(免费或付费)??我听说微软正在提供这样的好东西。有人对此有任何想法吗? 干杯,对战 最佳答案 你可以把它写在你的简历上。大部分就是这样。 肯
这个问题来自 SCJP 转储。可能看起来很愚蠢,但我对选项有点困惑。请帮帮我 public class Donkey2 { public static void main(String[] ar
public class Person { private String name; public Person(String name) { this.name =
实际上来自SCJP 6 StudyGuide Exam310-065(MGH,2008) alt text http://www.freeimagehosting.net/uploads/1f3746
我无法理解 SCJP 书籍 K&B 第 9 章(线程)中的以下程序 问题: class Dudes{ static long flag = 0; // insert code her
Kathey Sierra 的 SCJP 书中摘录如下: If a method is overridden but you use a polymorphic (supertype) referen
public class Threads2 implements Runnable { public void run() { System.out.println("run.
这个问题是由考试实验室操纵的 public class B{ public static void main(String args[]){ byte g =10;
我是一名优秀的程序员,十分优秀!