2.5内置类和静态内置类

先来看内置类和静态内置类的使用

package com.myObject;

public class PublicClass {
    String p="PublicClass";

    public String getP() {
        return p;
    }

    public void setP(String p) {
        this.p = p;
    }

    public class PrivateClass1 {
        String p1="PrivateClass1";

        public String getP1() {
            return p1;
        }

        public void setP1(String p1) {
            this.p1 = p1;
        }

    }

    public static class PrivateClass2 {
        String p2="PrivateClass1";

        public String getP2() {
            return p2;
        }

        public void setP2(String p2) {
            this.p2 = p2;
        }

    }
}
package com.test;

import com.myObject.PublicClass;
import com.myObject.PublicClass.PrivateClass1;
import com.myObject.PublicClass.PrivateClass2;

public class ClassTest {
    public static void main(String[] args) {
        PublicClass p = new PublicClass();
        
        PrivateClass1 p1 = p.new PrivateClass1();
        PrivateClass2 p2 = new PrivateClass2();
        
        System.out.println(p.getP());
        System.out.println(p1.getP1());
        System.out.println(p2.getP2());
    }

}

内置类和静态内置类作为对象锁,跟普通类的用法一样

package com.myObject;

public class PublicClass2 {


    public static class PrivateClass1 {

        public void p1m1(PrivateClass2 class2){
            try {
                synchronized(class2){
                System.out.println(System.currentTimeMillis() + " "+ Thread.currentThread().getName()+" begin");
                Thread.sleep(3000); 
                System.out.println(System.currentTimeMillis() + " "+ Thread.currentThread().getName()+" end");
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

        public void p1m2(){
            try {
                synchronized(this){
                System.out.println(System.currentTimeMillis() + " "+ Thread.currentThread().getName()+" begin");
                Thread.sleep(3000); 
                System.out.println(System.currentTimeMillis() + " "+ Thread.currentThread().getName()+" end");
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }


    }

    public static class PrivateClass2 {
        synchronized public void p2m1(){
            try {
                System.out.println(System.currentTimeMillis() + " "+ Thread.currentThread().getName()+" begin");
                Thread.sleep(3000); 
                System.out.println(System.currentTimeMillis() + " "+ Thread.currentThread().getName()+" end");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }
}
package com.myThread;

import com.myObject.PublicClass2.PrivateClass1;
import com.myObject.PublicClass2.PrivateClass2;




public class Thread1a extends Thread {
    PrivateClass1 class1;
    PrivateClass2 class2;

    public Thread1a(PrivateClass1 class1,PrivateClass2 class2) {
        this.class1 = class1;
        this.class2 = class2;
    }

    @Override
    public void run() {
        super.run();
        class1.p1m1(class2);;

    }
}
package com.myThread;

import com.myObject.PublicClass2.PrivateClass1;

public class Thread1b extends Thread {
    PrivateClass1 class1;

    public Thread1b(PrivateClass1 class1) {
        this.class1 = class1;
    }

    @Override
    public void run() {
        super.run();
        class1.p1m2();;

    }
}
package com.myThread;


import com.myObject.PublicClass2.PrivateClass2;

public class Thread1c extends Thread {
    PrivateClass2 class2;

    public Thread1c(PrivateClass2 class2) {
        this.class2 = class2;
    }

    @Override
    public void run() {
        super.run();
        class2.p2m1();

    }
}
package com.test;

import com.myObject.PublicClass2.PrivateClass1;
import com.myObject.PublicClass2.PrivateClass2;
import com.myThread.Thread1a;
import com.myThread.Thread1b;
import com.myThread.Thread1c;

public class Test1 {
    public static void main(String[] args) throws InterruptedException {
        PrivateClass1 class1 = new PrivateClass1();
        PrivateClass2 class2 = new PrivateClass2();

        Thread1a thread1a = new Thread1a(class1,class2);
        thread1a.setName("a");
        thread1a.start();
        Thread1b thread1b = new Thread1b(class1);
        thread1b.setName("b");
        thread1b.start();
        Thread1c thread1c = new Thread1c(class2);
        thread1c.setName("c");
        thread1c.start();


    }
}

打印结果

1452765098349 a begin
1452765098351 b begin
1452765101350 a end
1452765101350 c begin
1452765101351 b end
1452765104350 c end

b和a(c)异步,a和c同步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值