当前位置: 代码迷 >> J2SE >> 同步的小小疑点
  详细解决方案

同步的小小疑点

热度:177   发布时间:2016-04-24 02:28:22.0
同步的小小问题
我知道同步代码块的时候只能锁对象或者类

synchronized(一个对象或者一个类){
//代码
}

但是呢,我想单独锁一个对象中的某个原始类型的成员变量。。
比如是个int型的:
int i;

这不能直接放在括号里,我给转了个型。。
synchronized(Integer)i){}

话说这样做是正常套路么。。有什么问题么??

------解决方案--------------------
楼主能否说下这样的需求是为了达到什么母的?这样的话比较好解释
------解决方案--------------------
Java code
同步块,示例代码如下:public void method3(SomeObject so){    synchronized(so)    {        //…..     }}这时,锁就是so这个对象,谁拿到这个锁谁就可以运行它所控制的那段代码。当有一个明确的对象作为锁时,就可以这样写程序,但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁:class Foo implements Runnable{        private byte[] lock = new byte[0]; // 特殊的instance变量        Public void methodA()         {           synchronized(lock) { //… }        }        //…..}注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock= new Object()则需要7行操作码。
------解决方案--------------------
Java code
package Test;public class TestForSynchronized {    /**     * @param args     */    public static void main(String[] args) {        final Test test = new Test();        Thread thread1 = new Thread(new Runnable() {            public void run() {                test.test();            }        }, "ta");                Thread thread2 = new Thread(new Runnable() {            public void run() {                test.test();            }        }, "tb");                thread1.start();        thread2.start();    }}class Test {    int i = 0;    public void test() {        synchronized ((Integer) i) {//根据你的说法,把int变量i转型为Integer            for (int j=0; j < 6;j++) {                System.out.println("####################################");                System.out.println(Thread.currentThread().getName() + "  " + i);                System.out.println("####################################");                                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                i++;            }        }    }}
  相关解决方案