synchronized()

yangliyun2008 2008-05-06 08:19:01

public class Letters extends Thread{
private String name;
public Letters(String name) {
this.name=name;
}
public void write(){
System.out.print(name);
System.out.print(name);
}
public void run(){
synchronized (System.out){//或者用 synchronized (Letters.class){ x
write();
}
}

public static void main(String[] args) {
new Letters("X").start();
new Letters("Y").start();
}
}


x 行中 System.out 或者Letters.class 在这里分别代表什么啊?? 为什么这样用呢? 目的想让这个程序输出 XXYY或 YYXX
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
密码测试 2008-05-06
  • 打赏
  • 举报
回复
synchronized (System.out){//或者用 synchronized (Letters.class){的含义就是说每个到达这里的线程都要获得System.out(或者Letters.class)这个对象的同步锁,才能执行下去,否则只能等待.

而且每个对象都有一个线程等待集合.所有请求该对象同步锁没有成功的线程都会被该集合所存储.一旦该对象的同步锁被释放,它就会通知这个集合中所有的对象,同步锁又可以使用了.
密码测试 2008-05-06
  • 打赏
  • 举报
回复
事实上每个对象都有一个同步锁,只有得到同步锁,才能执行同步块中的代码,这样一来当多个线程要执行这段代码的时候,只有一个得到了锁的线程能够成功,其他的都要等待这个线程释放该同步锁,这也是同步为什么降低效率的原因之一.
shili150 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fuyou001 的回复:]
synchronized 同步关键字
[/Quote]

就是按照顺序执行
panxuan 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fuyou001 的回复:]
synchronized 同步关键字
[/Quote]
fuyou001 2008-05-06
  • 打赏
  • 举报
回复
synchronized 同步关键字
刘彬彬 2008-05-06
  • 打赏
  • 举报
回复
x 行中 System.out 或者Letters.class只是代表synchronized的监听器对象!
你用其它的对象都是可以的,譬如你用this也行,你自己随便定义一个Stirng str="",用str也可以!
这个监听器对象是随意的.
为什么这样用呢?是因为java中规定了synchronized关键字必须要这么用啊,是语法上的规定啦!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧