博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Synchronized,Synchronized(this),Synchronized类实例锁,Synchronized类锁,Synchronized变量锁一试就懂...
阅读量:6689 次
发布时间:2019-06-25

本文共 3622 字,大约阅读时间需要 12 分钟。

hot3.png

public class TestSynchronized1 {        public static void main(String[] args) {        Fun1 fun = new Fun1();        Fun1 fun1 = new Fun1();        new Thread(new Runnable() {            @Override            public void run() {                String name = Thread.currentThread().getName();                fun.runSync(name);                System.out.println("thread end:" + name);            }        }, "thread-1").start();        new Thread(new Runnable() {            @Override            public void run() {                String name = Thread.currentThread().getName();                fun.runThis(name);                System.out.println("thread end:" + name);            }        }, "thread-2").start();        /*TestSynchronized1 sss = new TestSynchronized1();        Fun1 fun = new Fun1();        new Thread(sss.new Thread1(fun),"thread-1").start();        new Thread(sss.new Thread2(fun),"thread-2").start();*/    }    class Thread1 implements Runnable {        private Fun1 fun;        public Thread1(Fun1 fun) {            this.fun = fun;        }        @Override        public void run() {            String name = Thread.currentThread().getName();            try {                Thread.sleep(200);            } catch (InterruptedException e) {                e.printStackTrace();            }            fun.runThis(name);            System.out.println("thread end:" + name);        }    }    class Thread2 implements Runnable {        private Fun1 fun;        public Thread2(Fun1 fun) {            this.fun = fun;        }        @Override        public void run() {            String name = Thread.currentThread().getName();            try {                Thread.sleep(200);            } catch (InterruptedException e) {                e.printStackTrace();            }            fun.runThis(name);            System.out.println("thread end:" + name);        }    }}class Fun1 {/*//同实例 不阻塞。不同实例 不阻塞。不是同一个锁fun.runSync(name);fun.runThis(name);//同实例 阻塞。同实例 阻塞。同一个锁fun.runS(name);fun1.runThis(name); */    //都不阻塞    public void run(String name) {        try {            for (int i = 0; i < 5; i++) {                System.out.println("thread in:" + name);                Thread.sleep(200);                System.out.println("thread out:" + name);            }        } catch (InterruptedException e) {            e.printStackTrace();        }    }    //同实例 阻塞    //不同实例 不阻塞    public synchronized void runSync(String name) {        try {            for (int i = 0; i < 5; i++) {                System.out.println("thread in:" + name);                Thread.sleep(200);                System.out.println("thread out:" + name);            }        } catch (InterruptedException e) {            e.printStackTrace();        }    }    //同实例 阻塞    //不同实例 阻塞    public static synchronized void runS(String name) {        try {            for (int i = 0; i < 5; i++) {                System.out.println("thread in:" + name);                Thread.sleep(200);                System.out.println("thread out:" + name);            }        } catch (InterruptedException e) {            e.printStackTrace();        }    }    //同实例 阻塞    //不同实例 阻塞    public void runThis(String name) {        synchronized (Fun1.class) {            try {                for (int i = 0; i < 5; i++) {                    System.out.println("thread in:" + name);                    Thread.sleep(200);                    System.out.println("thread out:" + name);                }            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}

转载于:https://my.oschina.net/u/3005325/blog/2994062

你可能感兴趣的文章
android-------非常好的图片加载框架和缓存库(Picasso)
查看>>
Titanium, PhoneGap, Sencha Touch, jQuery Mobile – Clearing up confusion
查看>>
eclipse如何部署Web工程到tomcat中
查看>>
在CentOS7上安装JDK1.8
查看>>
搜索和网页排名的数学原理
查看>>
Xcode项目中同一个名称不同位置 简单修改
查看>>
java设计模式-建造者模式
查看>>
oracle笔记
查看>>
ContentProvider数据更新
查看>>
一些常用RPM Repository(RPM软件仓库)地址
查看>>
Xcode常用插件
查看>>
实体 map 属性
查看>>
php设计模式--适配器模式
查看>>
java中的枚举类 enum使用与分析
查看>>
JAVA 四大域对象总结
查看>>
GIT 常用命令
查看>>
企业级落地容器与DevOps,选用K8S都有哪些“姿势”
查看>>
Android平台播放语音时支持听筒、喇叭之间切换
查看>>
RPC的实现
查看>>
不一样的Office 365之 —— 使用StaffHub管理你的排班
查看>>