jjzjj

java - Java 是否隐式通知等待线程?

我写了一个永远不会停止的测试应用程序。它发出t.wait()(t是一个Thread对象),但我从不调用通知。为什么这段代码结束?尽管主线程在t上同步,但生成的线程仍在运行,因此它不会锁定此对象。publicclassThreadWait{publicstaticvoidmain(StringsArgs[])throwsInterruptedException{System.out.println("hello");Threadt=newMyThread();synchronized(t){t.start();Thread.sleep(5000);t.wait();java.lang.S

java - 线程1在java同步方法1中执行,线程2是否可以在java同步方法2中执行?

想知道是否有人可以帮我解决这个问题。(学生)假设我们有两个线程,“Thread1”和“Thread2”。如果Thread1在方法1中执行,那么Thread2是否可以在方法2中执行?voidmethod1(){synchronized(this){}}voidmethod2(){synchronized(this){}}我要么认为是的,Thread2可以进入,因为“this”只是该方法的实例,或者不能,因为“this”是该类的实例并且Thread1持有它。 最佳答案 没有与特定方法关联的监视器-有与对象关联的监视器。因此,如果您尝试在

java - Thread.sleep() 内部是如何工作的

假设我有一个线程T,它持有一个资源R。如果我在当前线程(即T)上调用Thread.sleep(),它会在转到之前释放资源R(让其他线程使用它)吗?睡不睡?或者它会持有该资源,当它醒来时它会再次使用资源R并在完成工作后释放它? 最佳答案 首先Thread.sleep()是Blocking库方法。线程可能会阻塞或暂停,原因有多种:WAITINGI/O完成、等待获取锁、等待从Thread.sleep唤醒或等待另一个线程中的计算结果。当线程阻塞时,它通常被挂起并置于阻塞线程状态之一。因此,当您调用sleep()方法时,Thread离开CPU

java方法防止并发访问

如何防止并发访问。我有这样的代码publicclassMCimplementsRunnable{publicvoidrun(){sync();}publicstaticvoidmain(Stringp[]){MCmc=newMC();MCmc2=newMC();MCmc3=newMC();MCmc4=newMC();Threadt=newThread(mc);t.start();Threadt2=newThread(mc2);t2.start();Threadt3=newThread(mc3);t3.start();Threadt4=newThread(mc4);t4.start();

java - 要打印 100,该怎么做?

我想在下面的程序中打印100作为输出。我得到0作为答案。classsextendsThread{intj=0;publicvoidrun(){try{Thread.sleep(5000);}catch(Exceptione){}j=100;}publicstaticvoidmain(Stringargs[]){st1=news();t1.start();System.out.println(t1.j);}} 最佳答案 您需要等待Thread完成。我已经添加了对join的调用。对你来说,这将阻塞并等待Thread完成,然后再查看j的值

java - 一个Java应用程序是如何配备的?

我从:EveryJavaapplicationstartswithamainmethodthatrunsinthemainthread.InaSwingprogram,themainthreadisshort-lived.Itschedulestheconstructionoftheuserinterfaceintheeventdispatchthreadandthenexits...Otherthreads,suchasthethreadthatpostseventsintotheeventqueue,arerunningbehindthescenes,butthosethreads

java - 为什么 java.lang.Thread 在启动时不调用其显式 java.lang.Runnable 的 run() 方法?

Javadocs说明如果我们在创建新线程时提供一个Runnabletarget,该线程的.start()将运行run()方法提供的可运行。如果是这样的话,这个测试代码不应该打印“a”(而不是打印“b”)吗?publicclasstest{publicstaticvoidmain(String[]args){Runnabler=newRunnable(){@Overridepublicvoidrun(){System.out.println("a");}};Threadt=newThread(r){@Overridepublicvoidrun(){System.out.println("

java - 为什么我的线程程序只使用一个 CPU?

我有一个执行长时间计算的程序,所以我想加快它的性能。所以我现在尝试启动3个线程,但是java.exe仍然占用25%的CPU使用率(所以,只使用了一个CPU),即使我尝试使用它仍然存在>.setPriority(Thread.MAX_PRIORITY);并实时设置java.exe的优先级(24)。我尝试使用RealtimeThread但它似乎运行得更慢。如果每个线程分配给一个处理器就完美了,总CPU使用率提高到75%,但我不知道该怎么做。这就是我的代码现在的样子:Threadg1=newMyThread(i,j);g1.setPriority(Thread.MAX_PRIORITY);g

java - 如果您将对象分配给最终字段,其他线程是否会看到该对象的非最终/非 volatile 字段的先前更新?

阅读Java语言规范时,我发现了这段关于final字段的摘录:Theusagemodelforfinalfieldsisasimpleone:Setthefinalfieldsforanobjectinthatobject'sconstructor;anddonotwriteareferencetotheobjectbeingconstructedinaplacewhereanotherthreadcanseeitbeforetheobject'sconstructorisfinished.Ifthisisfollowed,thenwhentheobjectisseenbyanothe

java - 通过扩展 Thread 类来创建 Thread

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Java:“implementsRunnable”vs.“extendsThread”Java提供了两种创建Thread类的选项,即通过实现Runnable或通过扩展Thread类。我知道实现Runnable可能有很多原因,但不确定扩展Thread类以创建自己的Thread类的场景是什么?能否请您提供扩展Thread似乎可行或更好的选择或优势的场景...有一个Question在线程上,但这没有回答我的问题