这些天,我在看android的进程同步,想到syschronized关键字可以用来修饰类内的静态变量,便写了一个程序
public class mRunnable implements Runnable{
private static Integer count = 0;
@Override
public void run() {
synchronized (count){
for(int i=0;i<5;i++)
{
count ++;
try {
Log.e("count:",""+count+" "+ Thread.currentThread().getName());
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRunnable mrn = new mRunnable();
Thread thread1 = new Thread(new mRunnable());
Thread thread2 = new Thread(new mRunnable());
thread1.start();
thread2.start();
}
}
结果发现进程间并没有同步,后来才想到Integer内包装的int对象为final, count++时相当于count = new Integer(count+1),所以对象改变了, 就不在能起到同步作用,类似的还有String类和其他包装的数字类型。