Java并发编程-多线程问题案例

Main:

public class Main {

//    static volatile int i =0;

    public static void main(String[] args) {
Person p = new Person("xiaoming");
for(int j=0;j<1000;j++){
    new Thread(new Runnable() {
        @Override
        public  void run() {
            synchronized (this){
                try {
                    p.add();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }

            System.out.println(Person.age+"*******");
        }
    }).start();
}

try {
    new Thread().sleep(500);
} catch (InterruptedException e) {
    throw new RuntimeException(e);
}
System.out.println(Person.age);

}

Person.class:
package pj.imcp;
public  class  Person {

    public Person(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String name;
    public  volatile static int age;

    public  Person(int age) {
        this.age = age;
    }

    public synchronized void add() throws InterruptedException {
        this.age++;
    }
}


//当某个变量或方法需要被类的所有实例共享时,可以使用static修饰

//并发3个特性:可见性,有序性,原子性

发表回复