public class TestWhile extends Thread{
//
// int ticket = 50;
// public void run(){
// while(ticket<2){
// System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
// }
// }public static void main(String args[]){
new whilet().start();
new whilet().start();
}
}class whilet extends Thread{
static int ticket = 50;
static{
System.out.println("dayin");
}
public void run(){while(true){
System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
}
}}
请帮忙解析下面的输出结果
我使用的是jdk5 和eclipse3.2
输出结果为:
Thread-0 -127757
Thread-0 -127758
Thread-0 -127759
Thread-1 -127748
Thread-1 -127761
Thread-1 -127762
Thread-1 -127763
Thread-1 -127764
Thread-1 -127765
Thread-1 -127766
Thread-1 -127767
Thread-1 -127768
-------------
//
// int ticket = 50;
// public void run(){
// while(ticket<2){
// System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
// }
// }public static void main(String args[]){
new whilet().start();
new whilet().start();
}
}class whilet extends Thread{
static int ticket = 50;
static{
System.out.println("dayin");
}
public void run(){while(true){
System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
}
}}
请帮忙解析下面的输出结果
我使用的是jdk5 和eclipse3.2
输出结果为:
Thread-0 -127757
Thread-0 -127758
Thread-0 -127759
Thread-1 -127748
Thread-1 -127761
Thread-1 -127762
Thread-1 -127763
Thread-1 -127764
Thread-1 -127765
Thread-1 -127766
Thread-1 -127767
Thread-1 -127768
-------------
解决方案 »
- POI导出百万条数据到Excel,要怎么弄啊?急~!!!急~!!!
- static方法和一般方法有什么区别
- 设计模式——消除重复代码
- 发现一个JAVA时区的问题
- 薪水计算,一道习题.想要一份非常细致的正确的解答.自己有点犯迷糊就发上来了.希望给点注释.
- 用JBuilder2005进行编译程序的时候老是出现下面错误提示?该怎么办啊?
- 请问org.tiling.scheduling.*这个包在什么地方可以下载?谢谢
- jbuilder的问题java.lang.NoClassDefFoundError: ...是什么例外?
- 请问如何在java中访问一个Foxpro的表?
- 如何用Java实现上传文件功能
- HelloWorld这样写也可以,为什么?
- JAVA小问题,一定要来看一下额!
public class TestWhile extends Thread {
//
// int ticket = 50;
// public void run(){
// while(ticket <2){
// System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
// }
// } public static void main(String args[]){
System.out.println("main:"+Thread.currentThread().getName());
new whilet().start();
new whilet().start();
}
} class whilet extends Thread{
static int ticket = 50;
static Object obj=new Object(); //加锁目标
//static{
//System.out.println("dayin");
//}
public void run(){ while(true){
synchronized(obj){ //给obj对象加锁,同步块
if(ticket>0){
try{
Thread.sleep(10);
//睡眠10毫秒,仅仅是为了测试结果
}catch(Exception e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
}
}
}
}
}
但是:在没有加锁之前的输出中没有静态代码块的输出,同时ticket的初始值100好像也没有什么作用.
1、将代码进行良好的格式化,以方便阅读。
2、在发帖文本框的上方单击“#”按钮,选择 Java
3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:public class Hello { // 程序入口
public static void main(String[] args) {
System.out.println("Hello!");
}
}
public class TestWhile extends Thread {
//
// int ticket = 50;
// public void run(){
// while(ticket <2){
// System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
// }
// } public static void main(String args[]){
System.out.println("main:"+Thread.currentThread().getName());
new whilet().start();
new whilet().start();
}
} class whilet extends Thread{
static int ticket = 50;
static Object obj=new Object(); //加锁目标
static{
System.out.println("dayin"); //去掉最static块注释
}
public void run(){ while(true){
synchronized(obj){ //给obj对象加锁,同步块
if(ticket>0){
try{
Thread.sleep(10);
//睡眠10毫秒,仅仅是为了测试结果
}catch(Exception e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
}
}
}
}
} //!LZ再去好好测试下咯(已在本人机子运行过)
楼主这段代码的问题如下:
1、线程没有同步,按2楼兄弟这样就好。
2、while是一个死循环,所以你没有看到静态代码块的输出结果和ticket的初始值,只看到了后面的一段代码。public class TestWhile extends Thread{
//
// int ticket = 50;
// public void run(){
// while(ticket <2){
// System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
// }
// }public static void main(String args[]){
new whilet().start();
new whilet().start();
}
}class whilet extends Thread{
static int ticket = 50;
static{
System.out.println("dayin");
}
public void run(){ while(ticket > 0){
System.out.println(Thread.currentThread().getName()+"\t"+ticket--);
}
}}