学习synchronized遇到的一点问题
2015-09-23 23:32
260 查看
package thread;
public class synchronization {
public static void main(String[] args){
Thread thread1=new Thread(new MySynchronized());
Thread thread2=new Thread(new MySynchronized());
thread1.start();
thread2.start();
}
}
class MySynchronized implements Runnable{
Object object=new Object();
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (object) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+"gogogo");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"gameover");
}
}
}
}
更多0
在这段代码中我发现synchronized关键字完全没有起作用,线程1和线程2在交替执行
然后发现原来是这两行代码写的有问题
Thread thread1=new Thread(new MySynchronized());
Thread thread2=new Thread(new MySynchronized());
这里我创建了两个完全不同的MySynchronized对象,所以线程thread和线程thread2是各自独立的两个线程,以至于synchronized不能起到作用
将上面两行代码改为:
MySynchronized my=new MyChronized();
Thread thread1=new Thread(my);
Thread thread2=new Thread(my);
这样就可以了
(注意)同步中锁对象,其实可以指任意对象。但是使用同步的时候,就是每个线程访问的锁对象必须要是同一个对象。否者同步失败。
public class synchronization {
public static void main(String[] args){
Thread thread1=new Thread(new MySynchronized());
Thread thread2=new Thread(new MySynchronized());
thread1.start();
thread2.start();
}
}
class MySynchronized implements Runnable{
Object object=new Object();
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (object) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()+"gogogo");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"gameover");
}
}
}
}
更多0
在这段代码中我发现synchronized关键字完全没有起作用,线程1和线程2在交替执行
然后发现原来是这两行代码写的有问题
Thread thread1=new Thread(new MySynchronized());
Thread thread2=new Thread(new MySynchronized());
这里我创建了两个完全不同的MySynchronized对象,所以线程thread和线程thread2是各自独立的两个线程,以至于synchronized不能起到作用
将上面两行代码改为:
MySynchronized my=new MyChronized();
Thread thread1=new Thread(my);
Thread thread2=new Thread(my);
这样就可以了
(注意)同步中锁对象,其实可以指任意对象。但是使用同步的时候,就是每个线程访问的锁对象必须要是同一个对象。否者同步失败。
相关文章推荐
- LeetCode Reverse Bits
- 迁移/home目录至新硬盘分区总结--无备份情况下
- mysql client 参数
- 全排列个数
- 【j360-boot】Spring-boot系列一(可能是最好的quick start)
- MDM_weeke1
- 深入分析iOS问题-performSelector:onThread:withObject:waitUntilDone
- R使用RMySQL包
- 转 jvm设置调优
- 程序语言那些事--鸟瞰图
- C++基础中常见易混淆知识点
- test
- c# windows form 生命周期 (Life cycle) 事件 顺序
- android WebView的缓存模式、JS交互
- Caffe安装 Ubuntu14.04
- JAVA学习第二天
- Codeforces Round #321 (Div. 2) E - Kefa and Watch(hash + 线段树)
- 转 JVM内存分析及导致内存溢出的不健壮代码及解决办法
- 1044. 火星数字(20)
- MySQL的常见SQL语句范例