synchronized run()方法的问题
来源:互联网 发布:unity3d 水波纹特效 编辑:程序博客网 时间:2024/06/05 19:32
昨天在看线程编程的时候,想到了了一个问题,就是给run方法加上synchronized能实现同步吗,所以就写了如下代码:
public class MyThread extends Thread {@Overridepublic synchronized void run() {// TODO Auto-generated method stubfor(int i=0; i<100; i++){System.out.println(Thread.currentThread().getName());}}public static void main(String[] args){for(int j=0; j<3; j++){
MyThread mt = new MyThread();mt.setName(Integer.valueOf(j).toString());mt.start();}}}运行之后发现根本没有实现同步,还是几个线程在同时运行,查资料之后发现了问题所在,仔细观察new线程的代码:
MyThread mt = new MyThread();
在main函数里面它是通过for循环实现,实际上它是new出了不同的线程对象,也就是说其实每个MyThread对象都获得了各自的对象锁,都可以执行各自的run方法,解决办法是不去继承Thread类,通过实现runable接口的办法,实现代码如下:
public class MyThread implements Runnable {@Overridepublic synchronized void run() {// TODO Auto-generated method stubfor(int i=0; i<100; i++){System.out.println(Thread.currentThread().getName());}}public static void main(String[] args) throws InterruptedException {MyThread mt = new MyThread();for(int j=0; j<3; j++){Thread t = new Thread(mt);t.setName(Integer.valueOf(j).toString());t.start();}}}这样就实现了对run方法的同步,因为建立的每个线程都是针对mt这同一个对象。
参考资料:http://www.cnblogs.com/yanhaidong/archive/2011/06/01/2339048.html
1 0
- synchronized run()方法的问题
- synchronized run()方法
- synchronized run()方法
- synchronized run()方法
- synchronized run()方法
- day11多线程,run方法。卖票多线程示例。synchronized,同步锁对象,回顾单例。死锁问题
- vbs的Run方法
- angular的run方法
- 关于Synchronized方法使用问题
- asio.run()的问题
- 同步synchronized的问题
- synchronized方法和synchronized块的区别
- synchronized块和synchronized方法的区别
- synchronized与static synchronized 的区别以及synchronized继承问题
- java synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较
- 线程同步问题 解决同步问题的方法 synchronized方法 同步代码块
- Application的run方法分析
- Java【多线程知识总结(7)】多线程同步问题-关于synchronized代码块和synchronized方法的应用
- Android实践 -- 设置系统日期时间和时区
- C++每日一练(I/O)
- Android 代码片段
- android中图片的存储规则建议
- 润乾报表分页
- synchronized run()方法的问题
- 使用JMAP dump及分析dump文件
- 人脸识别
- 在滞回比较器中,运算放大器工作在哪个区?
- js中的浏览器(Navigator)
- Xamarin开发获取SHA1值
- JAVA-IO流将A文件内容Copy到B文件中
- dede织梦建立独立内容模型
- springmvc配线程池Executor做多线程并发操作