注意:不能synchronized(j) 因为j是基本数据类型,不是对象!
package one; /** * 加一线程与减一线程共同操作一个数 两个问题: 1、线程同步--synchronized 2、线程之间如何共享同一个j变量--内部类 * */ public class test { private int j; private synchronized void inc() { j++; System.out.println(Thread.currentThread().getName() + "-inc:" + j); } private synchronized void dec() { j--; System.out.println(Thread.currentThread().getName() + "-dec:" + j); } class Inc implements Runnable { public void run() { for(int i=0;i<500;i++){ inc(); } } } class Dec implements Runnable { public void run() { for(int i=0;i<500;i++){ dec(); } } } public static void main(String[] args) { test t = new test(); Inc inc = t.new Inc(); Dec dec = t.new Dec(); for (int i = 0; i < 2; i++) { Thread thread = new Thread(inc); thread.start(); thread = new Thread(dec); thread.start(); } } }
或者将加1减1方法放在内部类中:
/** * 加一线程与减一线程共同操作一个数 两个问题: 1、线程同步--synchronized 2、线程之间如何共享同一个j变量--内部类 * */ public class test { private int j; class Inc implements Runnable { public void run() { for(int i=0;i<500;i++){ inc(); } } private synchronized void inc() { j++; System.out.println(Thread.currentThread().getName() + "-inc:" + j); } } class Dec implements Runnable { public void run() { for(int i=0;i<500;i++){ dec(); } } private synchronized void dec() { j--; System.out.println(Thread.currentThread().getName() + "-dec:" + j); } } public static void main(String[] args) { test t = new test(); Inc inc = t.new Inc(); Dec dec = t.new Dec(); for (int i = 0; i < 2; i++) { Thread thread = new Thread(inc); thread.start(); thread = new Thread(dec); thread.start(); } } }