当前位置: 技术问答>java相关
关于线程很菜的问题
来源: 互联网 发布时间:2015-07-16
本文导语: 我有一段程序: public class kkk implements Runnable { private String s =null; private int delay=0; private int l=12; kkk(String s,int delay) { this.s =s; this .delay=delay; } public void run() { synchronized(s){ ...
我有一段程序:
public class kkk implements Runnable
{
private String s =null;
private int delay=0;
private int l=12;
kkk(String s,int delay)
{
this.s =s;
this .delay=delay;
}
public void run()
{
synchronized(s){
try{
Thread.sleep(delay);
System.out.print(s);
}
catch(InterruptedException e){}
}
}
public static void main(String args[])
{
Thread t1=new Thread(new kkk("LLL",1000));
Thread t2=new Thread(new kkk("lll",500));
t1.start();
t2.start();
}
}
我的意思是:应该先打印LLL,应为我加锁了S。但为什么总lll呢????
public class kkk implements Runnable
{
private String s =null;
private int delay=0;
private int l=12;
kkk(String s,int delay)
{
this.s =s;
this .delay=delay;
}
public void run()
{
synchronized(s){
try{
Thread.sleep(delay);
System.out.print(s);
}
catch(InterruptedException e){}
}
}
public static void main(String args[])
{
Thread t1=new Thread(new kkk("LLL",1000));
Thread t2=new Thread(new kkk("lll",500));
t1.start();
t2.start();
}
}
我的意思是:应该先打印LLL,应为我加锁了S。但为什么总lll呢????
|
你生成了两个不同的对象,对S加锁有什么用吗?对每个线程对象来说
访问的都是自己的实例变量,所以。。。
访问的都是自己的实例变量,所以。。。
|
小写l改为大写L
String 如果""内字符一样,默认为同一个对象,所以可以当作一个对象来用,
都对"LLL"枷锁。
String 如果""内字符一样,默认为同一个对象,所以可以当作一个对象来用,
都对"LLL"枷锁。