public class Test{
public synchronized void test(){
System.out.println("线程安全");
}
}
Test test1 = new Test();
test1.test();Test test2 = new Test();
test2.test();上面的代码应该是先由test1执行test()方法完毕后再由test2执行test()方法,但是我查了相关资料,发现synchronized关键字当不是同一对象时,不会进行线程安全操作。
如上例test1和test2不是同一对象,虽然调用test()方法,但是不会进行线程安全。test2.test()可能会先执行,我知道有种方法,就是将Test写成单例类,让对象始终唯一的话, 可以对test()方法进行线程安全操作但是还有种情况呢?就是如果我将Test类的test()方法声明为静态的
public synchronized static void test(){
System.out.println("线程安全");
}
然后进行操作
Test.test();
Test.test();
一定会进行线程安全操作吗?
public synchronized void test(){
System.out.println("线程安全");
}
}
Test test1 = new Test();
test1.test();Test test2 = new Test();
test2.test();上面的代码应该是先由test1执行test()方法完毕后再由test2执行test()方法,但是我查了相关资料,发现synchronized关键字当不是同一对象时,不会进行线程安全操作。
如上例test1和test2不是同一对象,虽然调用test()方法,但是不会进行线程安全。test2.test()可能会先执行,我知道有种方法,就是将Test写成单例类,让对象始终唯一的话, 可以对test()方法进行线程安全操作但是还有种情况呢?就是如果我将Test类的test()方法声明为静态的
public synchronized static void test(){
System.out.println("线程安全");
}
然后进行操作
Test.test();
Test.test();
一定会进行线程安全操作吗?
解决方案 »
- onclick在firefox下可用在IE下不可用是怎么回事啊
- 求鼠标放上去达到的效果!
- 小问题~~~~~~~~~~~~~~~~~~~~~~~~~
- 求 JSP2.0 中文电子书!
- ############# 一些java,C#,delphi的视频下载 ##################
- 初学者碰到的问题
- javaweb
- 用BEAN操作文件时的数据一致性问题!
- 关于动态数组的请教----20
- 关于java 的下载问题!
- java中的java.awt.Color中的Color.red和Color.RED有什么区别?
- 请教通过java类怎么调用另一台服务器上的http接口地址(通过服务器间访问,不通过客户端跳转)
就是说test1和test2 是 实例化Test类的2个不同对象,当这2个不同对象调用Test的test()方法时可能不会按照顺序。不会等到test1.test()方法执行完毕后再去执行test2.test()方法。所以好象要将Test类做成单例类 或者 在test()方法声明static就可以对test()方法进行加锁?
才可以正确的调用这个方法的所有的对象,等待前面的对象执行完毕后再调用?
如果test1先执行test()方法,会不会test2.test()在test1.test()没执行完全后就进入了,达不到synchronized的作用。如果要test1.test()先执行完毕后再执行test2.test()方法,应该做什么操作。
可用单例模式或者将该方法设为静态方法来实现你的目的。
没有用hibernate等框架,就简单的用JDBC去调用这个方法
JSP里写 Test test = new Test(); test.buy();如果多人同事访问这个JSP,你觉得还会不会打达到我只允许第一个抢到的人买这件商品的效果呢。
因为我网上查询到 第一人new Test() 第二个人又new Test 这些new 的 Test都不是同一个对象,是达不到线程安全的,
所以crasy_potato他说的是对的,你们觉得呢。