Java-synchronized的用法
2016-01-04 16:47
405 查看
当N个并发线程访问同一个对象中的以synchronized修饰的代码块或者方法时,在同一时间内,只允许有一个线程执行该方法,其他线程必须等待,当【该方法】结束时(注意:不是【该线程】结束时,我看过其他朋友的博客,有说该线程结束是,这是不对的),其他线程才有机会执行这个方法
分别测试打开类2中的注释和不打开类2中的注释,从打印出结果可以知道:在同一时间内,只允许有一个线程执行该方法,其他线程必须等待,当【该方法】结束时,其他线程才有机会执行这个方法,而不是【该线程】结束时
--------------------------类1-------------------------- public class User{ public synchronized void gogogo(String s){ for(int i=0;i<1000;i++){ System.out.println(s+"GOGOGOGOGO"); } } } --------------------------类2-------------------------- class Runnab implements Runnable{ public User u; public String s; public void run(){ //while(true){注释掉注释掉注释掉注释掉 u.gogogo(s); //}注释掉注释掉注释掉注释掉注释掉 } } -------------------------测试类1-------------------------- public class ThreadAndRunnable { public static void main(String[] args) { User u=new User();//同一个对象 //线程1 Runnab r1=new Runnab(); r1.u=u; r1.s="线程1:"; Thread thread1 = new Thread(r1); //线程2 Runnab r2=new Runnab(); r2.u=u; r2.s="线程2:"; Thread thread2 = new Thread(r2); //启动线程 thread1.start(); thread2.start(); } }
分别测试打开类2中的注释和不打开类2中的注释,从打印出结果可以知道:在同一时间内,只允许有一个线程执行该方法,其他线程必须等待,当【该方法】结束时,其他线程才有机会执行这个方法,而不是【该线程】结束时
相关文章推荐
- Java使用MyEclipse构建webService简单案例
- 对象序列化(java.io.NotSerializableException: org.json.JSONArray)
- Spring配置问题——元素 "context:component-scan" 的前缀 "context" 未绑定
- Spring配置问题——元素 "context:component-scan" 的前缀 "context" 未绑定
- Some Java exceptions, messages and errors.
- Java——猜数游戏
- Java——猜拳游戏
- Java设计模式_结构型_组合模式_树根树叶和树枝
- [置顶] Spring mvc数据转换与格式化
- spring定时任务Quartz
- Java——抽象类
- 配置springMVC之后,引入js,css等资源处理
- Java——多态
- eclipse不自动弹出提示(alt+/快捷键失效)
- myeclipse启用/关闭debug模式
- JDk 内部分工具 简述
- java线程池分析和应用
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- java 传入多个参数
- spring的jar包下载