public class TestThreadSynchronized extends Thread{
Time timer = new Time();
public static void main(String[] args){
TestThreadSynchronized t1 = new TestThreadSynchronized();
TestThreadSynchronized t2 = new TestThreadSynchronized();
//t1.setName("t1");
//t2.setName("t2");
t1.start();
t2.start();
}
public void run(){
timer.add(Thread.currentThread().getName());
}
}class Time{
Time(){}
private static int num = 0;
public synchronized static void add(String s){
num++;
try{
Thread.sleep(1000);
}catch(InterruptedException e){}
System.out.println(s+" 你是第 "+num+" 个使用者");
}
}
为什么add()要用static 方法才可以实现 同步呢??不用静态方法就不行??哪位给解释一下
解决方案 »
- 【求助:java】如何清除输出到控制台显示的数据?
- 长文长分页
- 多线程中操作数据库,resultset被另一个线程提前关闭而出错,救大侠们的解答
- 如何设置打印边距?
- struts错误和信息显示标签
- Java初学者求救
- oracle java.sql.SQLException: ORA-01000: 超出打开游标的最大数
- 写文件问题!保留原有文件的数据继续写数据怎么做?
- #####超强的资料管理、报刊下载软件,大家有兴趣下载用用##########
- 我下载了一个tomcat4.0.1,是一个zip文件,解压缩后就像exe文件安装后一样出。。。
- 数组初始化,好纠结啊,大家救救啊
- 高分求一个数组的简单的算法
所以即使有多个不同的Time对象,你的程序中的
TestThreadSynchronized t1 = new TestThreadSynchronized();
TestThreadSynchronized t2 = new TestThreadSynchronized();
两个对象中有2个Time对象,
调用add方法也是同步的
如果是非静态的,则是在对象上加监视器,如果有两个Time对象,那么这两个对象的add方法是相互独立的