将共享数据和操作数据的方法一并封装到Runnable的实现子类中,然后在主方法中new其实例对象,将这个实例对象传个创建的两个匿名Thread对象,并开启运行。为何出现诡异的结果呢?麻烦大家帮忙看看!谢谢先! public class SaleTickets{
//static Tickets tickets = new Tickets();//这里和(1)处除了他是随类的创建而创建,
//存储在静态区,以及共享外还有什么区别吗?
public static void main(String[] args) {
Tickets tickets = new Tickets();//(1)
new Thread(tickets).start();//调用tickets身上的run方法将count--
new Thread(tickets).start();//也是调用tickets身上的run方法将count--
}
}
//将共享数据和操作数据的方法一并封装到Runnable的实现子类中
class Tickets implements Runnable{
private int count = 10000;
@Override
public /*synchronized*/ void run(){//这里为何加上同步另外一个进程就无法启动呢?
while(true){
count--;
System.out.println(Thread.currentThread().getName()+"|"+count);
}
}
}
//static Tickets tickets = new Tickets();//这里和(1)处除了他是随类的创建而创建,
//存储在静态区,以及共享外还有什么区别吗?
public static void main(String[] args) {
Tickets tickets = new Tickets();//(1)
new Thread(tickets).start();//调用tickets身上的run方法将count--
new Thread(tickets).start();//也是调用tickets身上的run方法将count--
}
}
//将共享数据和操作数据的方法一并封装到Runnable的实现子类中
class Tickets implements Runnable{
private int count = 10000;
@Override
public /*synchronized*/ void run(){//这里为何加上同步另外一个进程就无法启动呢?
while(true){
count--;
System.out.println(Thread.currentThread().getName()+"|"+count);
}
}
}
解决方案 »
- 求解
- 关于swing的一个小问题。
- FTPClient 创建远程文件并向文件里写内容!!!
- udp传输数据丢失很严重.......
- 关于Syncronized继承问题
- 在一个JPanel中怎样得到另一个JPanel中产生ActionEvent事件的事件源~~~~~~~~~在线等
- 谢谢~关于Thread.currentThread.destory()的问题
- servlet的doGet(), doPost(), doPut(), doDelete()是响应哪些请求的方法啊?请描述一下,谢谢
- 还是GUI的问题
- JB5中能否添加自定义的事件或者叫监听,怎样添加,高手请指教!!
- 大神门,帮帮我把!!!
- 关于打包jar后部分代码段失效的问题,具体的大侠里面请
复制一段话给你,自己看吧。synchronized 方法的缺陷:若将一个大的方法声明为synchronized 将会大大影响效率,典型地,若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中,将其声明为 synchronized ,并在主方法中调用来解决这一问题,但是 Java 为我们提供了更好的解决办法,那就是 synchronized 块。
就可以了
new Thread(tickets).start();//也是调用tickets身上的run方法将count--
你两个线程调的是同一对象,使用synchronized进入其中一个run方法,就会上锁,等它释放锁其它线程才能进来,但是run方法里是无限循环,所以根本出不来