举的例子不合适,容易误导别人!继承thread的子类中定义了票数变量,每new一下启动新线程,都会有5张票,把票数变量定义成全局变量试试
2016-03-13
已采纳回答 / 鸿泽
可能是因为并非窗口1首先获得CPU时间片,而是其他线程。首先是窗口2 ,执行到count--之后,sysout时就被阻塞了。注意此时count=4。然后是窗口1 ,执行了整个run方法 ,此时count=3。然后是窗口3 ,执行了整个run方法 ,此时count=2。此时窗口2恢复,继count--之后执行,输出count=3。然后是窗口3 ,执行了整个run方法 ,此时count=0。当然这种并不一定是这样,因为现在的多核CPU线程是可以同时执行的。
2016-03-12
class MyThread implements Runnable{
Lock lock = new ReentrantLock();
private int number=5;
@Override
public void run() {
lock.lock();
try{
while(number >0){
number--;
System.out.println(Thread.currentThread().getName()+"卖一张剩余票数:"+number);
}
}finally{
lock.unlock();
}
}}要加锁机制
Lock lock = new ReentrantLock();
private int number=5;
@Override
public void run() {
lock.lock();
try{
while(number >0){
number--;
System.out.println(Thread.currentThread().getName()+"卖一张剩余票数:"+number);
}
}finally{
lock.unlock();
}
}}要加锁机制
2016-02-27
最新回答 / 飘游人
extends Thread的例子没有问题。想实现的确实是3个窗口总共有5张票,老师故意用extends Thread的例子,就是为了说明这种方式达不到希望的效果(即实际出现的效果是你所说的“每个窗口拥有5张票”)。老师也在PPT中写明,只有Runnable的方式才适合多个线程处理同一资源的情况。如果硬要用extends Thread来实现效果,确实像你说的可以加static关键字,但老师想告诉我们的是,对于这样的情况,还是用Runnable好。
2016-02-16
thread代码里主函数那对象实例化和Runnable代码里的主函数对象实例化的代码都不一样,前提条件都不一样,咋比出thread和Runnable的不同啊。
而且我把ticketsRunnable里面的代码implements Runnable换成extends Thread,执行效果一样啊,那Thread和Runnable还有啥区别啊。
而且我把ticketsRunnable里面的代码implements Runnable换成extends Thread,执行效果一样啊,那Thread和Runnable还有啥区别啊。
2016-01-26