//synchromized
package MyPackage;
class A {
synchronized void get() {
System.out.println("A");
System.out.println("B");
}
synchronized void put() {
System.out.println("C");
System.out.println("D");
}
}
class Get implements Runnable {
Thread t;
A temp;
Get(A a) {
temp = a;
t = new Thread(this);
t.start();
}
public void run() {
temp.get();
}
}
class Put implements Runnable {
Thread t;
A temp;
Put(A a) {
temp = a;
t = new Thread(this);
t.start();
}
public void run() {
temp.put();
}
}
class MyJava {
static public void main(String args[]) {
A o = new A();
Get o1 = new Get(o);
Put o2 = new Put(o);
try {
o1.t.join();
o2.t.join();
} catch (InterruptedException e) {
System.out.println("interrupted!");
}
}
}
synchronized就是把一个线程调用的方法放在一个锁里面,让别的线程在方法返回前不能调用这个方法,但是要注意Put和Get里用的是同一个A实例,是由main方法传递上来的
同步的,比如3个线程(看做3个站台)完成一个卖100张票的任务,可能会出现3个站台同时卖一张票的情况,但是用synchronized后,就会同步,不会3个站台同时去卖一张票的情况,synchronized是用来同步的