编写多线程应用程序时,遇到的最常见问题之一是死锁.
我对社区的问题是:
什么是僵局?
你怎么发现它们?
你处理它们吗?
最后,你如何防止它们发生?
我正在研究java线程和死锁,我理解死锁的例子,但我想知道是否有一般规则要遵循以防止它.
我的问题是,是否有规则或技巧可以应用于java中的源代码以防止死锁?如果是,您能解释一下如何实施吗?
我正在努力用简单的词语解释线程中的"死锁",所以请帮忙.什么可能是"死锁"(例如,在Java中)的最佳示例,以及它如何在步骤中发生以及如何防止它?但是没有深入细节.我知道这就像问两个相反的事情,但仍然.如果您有任何以前的并发编程培训经验 - 那将是一流的!
我想知道在以下示例中有哪些替代方法可以避免死锁.以下示例是传输死锁问题的典型银行帐户.在实践中有哪些更好的解决方法?
class Account {
double balance;
int id;
public Account(int id, double balance){
this.balance = balance;
this.id = id;
}
void withdraw(double amount){
balance -= amount;
}
void deposit(double amount){
balance += amount;
}
}
class Main{
public static void main(String [] args){
final Account a = new Account(1,1000);
final Account b = new Account(2,300);
Thread a = new Thread(){
public void run(){
transfer(a,b,200);
}
};
Thread b = new Thread(){
public void run(){
transfer(b,a,300);
}
};
a.start();
b.start();
} …Run Code Online (Sandbox Code Playgroud) 我用多种语言编程,但我不知道代码中的死锁.
我认为这意味着它不会发生.
这是否经常发生(在编程中,而不是在数据库中)足够我应该关注它?
我目前正在使用Java并发.
我不知道怎么写负面情景测试.
我需要一种方法来制造死锁,我需要一种方法来看到,如果不使用同步,我可能会遇到像不一致这样的问题.
通常最好的方法是编写一些压力测试代码,如果省略同步,可能会显示不良结果?
任何代码示例都会非常适合.
谢谢大家!
有人可以用C++中的两个线程示例给我一个简单的死锁