关于JAVA进程的同步问题 代码如下 为什么运行后只有一个线程工作?
classTicketSystem{publicstaticvoidmain(String[]args){SellThreadst=newSellThread();new...
class TicketSystem
{
public static void main(String[] args)
{
SellThread st = new SellThread();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}
class SellThread implements Runnable
{
int tickets=100;
Object obj = new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(tickets>0)
{
System.out.println(Thread.currentThread().getName()+ "sell tickets"+tickets);
tickets--;
}
}
}
}
}
那怎么才能释放CPU资源呢? 而且我的程序的确不会自己结束?为什么啊? 应该到0了就结束的啊? 展开
{
public static void main(String[] args)
{
SellThread st = new SellThread();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
new Thread(st).start();
}
}
class SellThread implements Runnable
{
int tickets=100;
Object obj = new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(tickets>0)
{
System.out.println(Thread.currentThread().getName()+ "sell tickets"+tickets);
tickets--;
}
}
}
}
}
那怎么才能释放CPU资源呢? 而且我的程序的确不会自己结束?为什么啊? 应该到0了就结束的啊? 展开
5个回答
展开全部
麻烦楼上的哥哥们不要误人子弟了,不能结束的原因是你的线程里没有跳出while(true)的语句也就是没有进程的结束处理,应该if后边else{break;},而为什么都是一个线程调用的就是CPU分配时间片的问题了,在代码里加上sleep()处理下结果就明显了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先可以肯定的是当在run()中声明并创建是,那么新创建的对象就相当于run()的局部变量了,每个线程都会新建一个所以两个线程输出的num的值是相等的,但是为什么有时输出2我就不知道了,按上面说的应该是每次都是从0...[详细]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个应该是你的结果吧。
public class hello {
public static void main(String[] args) {
Thread t1 = new Thread(new SellThread(), "1");
t1.start();
Thread t2 = new Thread(new SellThread(), "2");
t2.start();
Thread t3 = new Thread(new SellThread(), "3");
t3.start();
Thread t4 = new Thread(new SellThread(), "4");
t4.start();
}
}
class SellThread implements Runnable {
int tickets = 100;
Object obj = new Object();
public void run() {
boolean flag = true;
while (flag) {
synchronized (obj) {
if (tickets > 0) {
System.out.println(
Thread.currentThread().getName()
+ "sell tickets"
+ tickets);
tickets--;
} else {
flag = false;
}
}
}
}
}
public class hello {
public static void main(String[] args) {
Thread t1 = new Thread(new SellThread(), "1");
t1.start();
Thread t2 = new Thread(new SellThread(), "2");
t2.start();
Thread t3 = new Thread(new SellThread(), "3");
t3.start();
Thread t4 = new Thread(new SellThread(), "4");
t4.start();
}
}
class SellThread implements Runnable {
int tickets = 100;
Object obj = new Object();
public void run() {
boolean flag = true;
while (flag) {
synchronized (obj) {
if (tickets > 0) {
System.out.println(
Thread.currentThread().getName()
+ "sell tickets"
+ tickets);
tickets--;
} else {
flag = false;
}
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(true)
{
if(tickets>0)
{
System.out.println(Thread.currentThread().getName()+ "sell tickets"+tickets);
synchronized(obj) //把 synchronized(obj)对象锁的范围调小,改完后结果是这样
{
tickets--;
}
} else{
break; //这里,退出循环,程序就结束了。
}
}
{
if(tickets>0)
{
System.out.println(Thread.currentThread().getName()+ "sell tickets"+tickets);
synchronized(obj) //把 synchronized(obj)对象锁的范围调小,改完后结果是这样
{
tickets--;
}
} else{
break; //这里,退出循环,程序就结束了。
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这里的代码
while(true)
{
synchronized(obj)
{
if(tickets>0)
{
System.out.println(Thread.currentThread().getName()+ "sell tickets"+tickets);
tickets--;
}
}
}
不会释放CPU资源,当然得等到这个线程执行完了才执行下一个了
while(true)
{
synchronized(obj)
{
if(tickets>0)
{
System.out.println(Thread.currentThread().getName()+ "sell tickets"+tickets);
tickets--;
}
}
}
不会释放CPU资源,当然得等到这个线程执行完了才执行下一个了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询