public class ThreadTest {
public static void main(String[] args) {
// 创建一个账户,里面有存款5000元
Account account = new Account(5000);
// 模拟取钱过程
GetMoney getMoney = new GetMoney(account);
new Thread(getMoney, "你").start();
new Thread(getMoney, "你老婆").start();
}
}
class GetMoney implements Runnable {
private Account account;
public GetMoney(Account account) {
super();
this.account = account;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "账户现在有"
+ account.getMoney() + "元");
// 使效果更明显,休眠10ms
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
int money = account.getMoney() - 2000;
account.setMoney(money);
System.out.println(Thread.currentThread().getName() + "取了2000元,账户现在有"
+ account.getMoney() + "元");
}
}
class Account {
private int money;
public Account(int money) {
super();
this.money = money;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
你账户现在有5000元 你老婆账户现在有5000元 你取了2000元,账户现在有3000元 你老婆取了2000元,账户现在有3000元
// Object可以为任何对象,表示当前线程取得该对象的锁。
synchronized (Object) {
}
@Override
public void run() {
synchronized (this) {
System.out.println(Thread.currentThread().getName() + "账户现在有"
+ account.getMoney() + "元");
// 使效果更明显,休眠10ms
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
int money = account.getMoney() - 2000;
account.setMoney(money);
System.out.println(Thread.currentThread().getName()
+ "取了2000元,账户现在有" + account.getMoney() + "元");
}
}
你账户现在有5000元 你取了2000元,账户现在有3000元 你老婆账户现在有3000元 你老婆取了2000元,账户现在有1000元
public class DeadlockTest {
public static void main(String[] args) {
String str1 = new String("资源1");
String str2 = new String("资源2");
new Thread(new Lock(str1, str2), "线程1").start();
new Thread(new Lock(str2, str1), "线程2").start();
}
}
class Lock implements Runnable {
private String str1;
private String str2;
public Lock(String str1, String str2) {
super();
this.str1 = str1;
this.str2 = str2;
}
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + "运行");
synchronized (str1) {
System.out.println(Thread.currentThread().getName() + "锁住"
+ str1);
Thread.sleep(1000);
synchronized (str2) {
// 执行不到这里
System.out.println(Thread.currentThread().getName()
+ "锁住" + str2);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
线程1运行 线程2运行 线程1锁住资源1 线程2锁住资源2
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有