最近看到多线程这块。有很多疑问,请教各位:
1、java解决多线程是使用同步机制,即对象锁,使用synchronized同步代码块或者方法。但是框架也好,直接通过new创建对象也好。new Object以后就是一个新的对象。加入每个线程过来都是new Object()。感觉不需要synchronized进行同步。莫非同步只在单例等条件下适用?
2、同步方法氛围static和非static的同步方法有什么区别?
我们都知道static是属于类级别的方法。而看了一些资料,上面说static的同步方法,一个线程调用以后,其他线程都不能再调用。非static的方法是对象级别的,当该对象有一个线程调用他的非static同步方法后,其他线程必须等这个线程执行完成以后才能调用该非static同步方法。
3、一个对象内部,一个synchronized方法调用另外一个synchronized方法有没有问题。请各位指教哈。在线等。
1、java解决多线程是使用同步机制,即对象锁,使用synchronized同步代码块或者方法。但是框架也好,直接通过new创建对象也好。new Object以后就是一个新的对象。加入每个线程过来都是new Object()。感觉不需要synchronized进行同步。莫非同步只在单例等条件下适用?
2、同步方法氛围static和非static的同步方法有什么区别?
我们都知道static是属于类级别的方法。而看了一些资料,上面说static的同步方法,一个线程调用以后,其他线程都不能再调用。非static的方法是对象级别的,当该对象有一个线程调用他的非static同步方法后,其他线程必须等这个线程执行完成以后才能调用该非static同步方法。
3、一个对象内部,一个synchronized方法调用另外一个synchronized方法有没有问题。请各位指教哈。在线等。
2.static方法所拥有的锁是类的Class对象的锁
3.可以的,锁是可重入的
第一个问题我是想问:如果我每个线程访问一个类的时候都是new一个对象。还需要同步吗?
第二个问题:补充一下,static同步方法我知道是对Class的锁,但是如果一个类有一个static的同步和一个非static的同步,一个线程调用了static的同步方法,其他线程还能调用非static同步方法么?如果调用了非static的同步方法,其他线程还能调用static的同步方法?
第三个问题:感谢回答,看了下确实是有重入的。