请教关于java的synchronized问题。 当一个线程进入一个对象的一个synchronized方法之后,其它线程是否可进入此对象的其它方法?请求高手给出解答,并附上测试的代码,非常感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然可以了,即使是其它方法也是synchronized ,照样也可以当然如果是static的,那就会锁住 非static的synchronized方法 两个不同的对象可以同时操作 static的synchronized方法两个不同的对象不能同时操作 这个说的对啊。 其他线程不可以进入 该对象的synchronized 方法,可以以进入 非 synchronized 方法。synchronized 修饰static 相当于 把互斥锁加到了 类变量上而已。 2 楼 3 楼 说的不对, synchronized 是在对象上加了一把互斥锁,只有当前线程可以访问该对象的synchronized 方法。DEMO 给你package com.meran.normalTest;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class CSDNDemo { public synchronized void step() throws InterruptedException{ TimeUnit.SECONDS.sleep(4); System.out.println(Thread.currentThread()+"执行step 1"); TimeUnit.SECONDS.sleep(4); } public synchronized void step2(){ System.out.println(Thread.currentThread()+"执行step2"); } public static void main(String [] args) throws InterruptedException{ CSDNDemo temp=new CSDNDemo(); Thread t1=new Thread(temp.new A()); t1.start(); TimeUnit.SECONDS.sleep(1); Thread t2=new Thread(temp.new B()); t2.start(); } class A implements Runnable{ public void run(){ try { step(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class B implements Runnable{ @Override public void run() { step2(); } }} 可以。synchronized关键字作用于方法之上,标明该方法是同步方法,那么在运行期,任何线程想要调用该方法,就需要获得该方法所属的对象的锁。一旦某个线程获得了该对象的锁,也就是锁住了这个对象,那么其它想要访问该方法的线程由于得不到该对象的锁,只能等待。但是,该对象中没有加synchronized关键字的方法,在被调用的时候,不需要获得对象的锁,因此该对象被锁住也无所谓,照样可以被直接调用。 其它方法也是synchronized 真的可以吗?你不要坑爹啊! 其他对象不能访问该对象的synchronized的其他方法,可以访问没有synchronized的。2、3楼坑爹呢 java连接到远程数据库 取数据 请问用S2SH做网站性能怎样? 今天学习的时候,有一个对hibernate拦截器的疑问 新人求教:file类如何操作远程机器上的文件 如何在JAVA里代码实现将WORD和EXCEL文档转换为TEXT或图片文件呢??急!急!急! spring + tomcat5.59 + hibernate + JOTM 配置分布式事务的问题 javamail 发送邮件报错,急~~~~ 关于sql server jdbc驱动的问题!! 关于Struts标签的嵌套问题 spring MVC 版本的祝福墙 快餐店餐饮管理系统 extjs和ssh结合做的文件上传时显示上传进度条
当然如果是static的,那就会锁住
static的synchronized方法两个不同的对象不能同时操作
这个说的对啊。 其他线程不可以进入 该对象的synchronized 方法,
可以以进入 非 synchronized 方法。
synchronized 修饰static 相当于 把互斥锁加到了 类变量上而已。
DEMO 给你
package com.meran.normalTest;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;public class CSDNDemo {
public synchronized void step() throws InterruptedException{
TimeUnit.SECONDS.sleep(4);
System.out.println(Thread.currentThread()+"执行step 1");
TimeUnit.SECONDS.sleep(4);
}
public synchronized void step2(){
System.out.println(Thread.currentThread()+"执行step2");
}
public static void main(String [] args) throws InterruptedException{
CSDNDemo temp=new CSDNDemo();
Thread t1=new Thread(temp.new A());
t1.start();
TimeUnit.SECONDS.sleep(1);
Thread t2=new Thread(temp.new B());
t2.start();
}
class A implements Runnable{
public void run(){
try {
step();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class B implements Runnable{ @Override
public void run() {
step2();
}
}
}