package threadlearning;
public class BankThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
ChuHu ch1=new ChuHu();
ChuHu ch2=new ChuHu();
Thread t1=new Thread(ch1,"aaa");
Thread t2=new Thread(ch2,"kkk");
t1.start();
t2.start();
}
}
class Bank {
static int jinKu = 0;
}
class ChuHu implements Runnable {
public void run() {
synchronized (new Object()) {
for (int i = 1; i <= 3; i++) {
System.out.println(Thread.currentThread().getName() + "第" + i
+ "次存入100元后金库里总额为:" + (Bank.jinKu+=100));
}
}
}
}
运行结果为:
aaa第1次存入100元后金库里总额为:100
kkk第1次存入100元后金库里总额为:200
aaa第2次存入100元后金库里总额为:300
kkk第2次存入100元后金库里总额为:400
aaa第3次存入100元后金库里总额为:500
而使用第二段代码就无法正确运行,这是为什么???
package threadlearning;
public class BankThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
ChuHu ch1=new ChuHu();
ChuHu ch2=new ChuHu();
Thread t1=new Thread(ch1,"aaa");
Thread t2=new Thread(ch2,"kkk");
t1.start();
t2.start();
}
}
class Bank {
static int jinKu = 0;
}
class ChuHu implements Runnable {
public void run() {
synchronized (new Object()) {
for (int i = 1; i <= 3; i++) {
Bank.jinKu += 100;
System.out.println(Thread.currentThread().getName() + "第" + i
+ "次存入100元后金库里总额为:" + Bank.jinKu);
}
}
}
}
运行结果为:-----
kkk第1次存入100元后金库里总额为:200
kkk第2次存入100元后金库里总额为:300
aaa第1次存入100元后金库里总额为:200
kkk第3次存入100元后金库里总额为:400
aaa第2次存入100元后金库里总额为:500
aaa第3次存入100元后金库里总额为:600