最新回答 / 小明100
Callable与 Future 两功能是Java在后续版本中为了适应多并法才加入的,Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务。Callable的接口定义如下;public interface Callable<V> { V call() throws Exception; } Callable和Runnable的区别如下:I Callable定义的方法是call,而Runnabl...
2016-11-26
最赞回答 / Angel若梦
你的代码有两处错误1.用继承Thread的方法实现多线程,需要new多个对象,这也是你在共享变量是加static的原因,所以,你使用的锁对象this是不同的对象,所以不能实现线程的互斥.可以使用该类的字节码对象Ticket.class作为锁对象.2.如果已经实现了互斥,你需要在同步代码块中增加一个判断条件,用来终止程序继续执行,否则会出现打印负数的情况.因为, 未获得锁的线程会在循环内等待,当一条线程将tickets--到0的时候,其他等待的线程获得锁以后会继续执行后续代码,导致运行结果不准确.
2016-03-13
最新回答 / 飘游人
extends Thread的例子没有问题。想实现的确实是3个窗口总共有5张票,老师故意用extends Thread的例子,就是为了说明这种方式达不到希望的效果(即实际出现的效果是你所说的“每个窗口拥有5张票”)。老师也在PPT中写明,只有Runnable的方式才适合多个线程处理同一资源的情况。如果硬要用extends Thread来实现效果,确实像你说的可以加static关键字,但老师想告诉我们的是,对于这样的情况,还是用Runnable好。
2016-02-16
最赞回答 / sxian_wang
你的理解大致上是对的,但不是刚好打印的时候被窗口2减去一张票,过程是这样的:当第一个线程获得CPU的时间片后,它的代码恰好执行到println那一行后,刚准备输出(但还没有获得tickets的值),这时候该线程的时间片被剥夺,等待下一次再获得时间片。等到别的线程执行完后,该线程再次获得时间片,它去访问tickets变量,应该tickets变量是被别的线程自减过得,所以获得不是4,而是一个比4小的值。由于这种运算在现在的CPU上很快,就会出现前三个都是2的情况。如果你给println语句加上一个synchr...
2015-12-19
最新回答 / good_2016
If you see the additional message "Unable to attach to 32-bit process running under WOW64",
your application is running with 32bit Java while using 64bit Eclipse on Windows.
Either using 64bit Java for your application or using 32bit Eclipse solv...
2015-12-02
最赞回答 / 哀幻暝
在这里一共有两个线程①.守护线程 ②主线程(main) 老师说的:若没有线程需要守护线程“守护”,那么守护线程就会退出程序运行之后两条线程都在执行:②线程再启动了①线程然后 继续执行到sc.next()语句 等待键盘输入①线程在启动之后就不停的写东西到文件中。如果在这之后的过程中,程序员在键盘中输入的任意字符,毁导致②继续执行,然后②就执行完啦,你看main方法中就那几行代码,全都执行完啦! 然后主线程就退出啦! 然后①线程就没有线程可以守护啦,自己也就退出啦!
2015-11-11
最赞回答 / 剪忉手
继承thread类和实现runnable接口本身就没有什么可比性。两者根部就不是同一类东西一个是接口,另一个是继承类且这个thread类也是继承了Runnable接口的。两者不同在于方法的实现不同,我也可以在继承thread类里写runnable的方法。再有就是java单继承的劣势,这点上Runnable会更好些。
2015-11-02