public class Test {
public static void main(String[] args) {
Person p = new Person();
ThreadGetPerson tg = new ThreadGetPerson();
tg.setP(p);
ThreadSetPerson tp = new ThreadSetPerson();
tp.setP(p);
new Thread(tg).start();
new Thread(tp).start();
new Thread(tg).start();
new Thread(tp).start();
}
ThreadSetPerson类{
this.p=p;
public void run() {
boolean flag =true;
int i=100;
循环 while(i>0){
同步 synchronized (p) {
if(p.flag){
if(flag){
p.setName(Thread.currentThread().getName()+"AAAAAAA:"+i);
p.setSex("男");
p.flag=false;
flag=false;
}else{
p.setName(Thread.currentThread().getName()+"BBB:"+i);
p.setSex("女");
p.flag=false;
flag=true;
}
p.notify();
}else{
p.wait();
}
循环最后 i--
ThreadGetPerson类{
this.p=p;
public void run() {
int i=100;
循环 while(i>0){
synchronized (p) {
if(p.flag){
p.wait();
}else{
System.out.println(p.getName()+"性别为:"+p.getSex());
p.flag=true;
p.notify();
}
}
i--;
}
大致就是上面的意思,两个线程赋值,两个线程输出,为什么会出现下面的结果呢?
Thread-1AAAAAAA:100性别为:男
Thread-3AAAAAAA:100性别为:男
Thread-1BBB:99性别为:女
Thread-3BBB:98性别为:女
Thread-1AAAAAAA:97性别为:男
就这些每次都不一样,程序线程全部进入wait()能理解,可是为什么会1,3线程都赋值了100呢?两个性别为女的BB,数值间隔只是1.
这结果明明表示1,3线程同时进入了同步代码块吗?
已经同步了的,而且都是一个对象p。
求大神回答