[检查问题底部的更新]如标题所示,我想编写一个接受方法并在新线程中执行该方法的类。我潜伏在SO周围并想出了类似的东西:importjava.util.concurrent.Callable;publicclassMyExecutorimplementsRunnable{privateCallablemethod;publicMyExecutor(CallablepMethod){this.method=pMethod;}@Overridepublicvoidrun(){try{//startanewThread,thenmethod.call();}catch(Exceptione){
对于涉及异步操作的库,我必须保持对对象的引用,直到满足特定条件。(我知道,这听起来很不寻常。所以这里有一些上下文,尽管它可能并不严格相关:该对象可能被认为是一个directByteBuffer,它用于JNI操作。JNI操作将获取缓冲区的地址。此时,该地址只是一个“指针”,不被视为对字节缓冲区的引用。该地址可能会被使用异步地,稍后时间。因此,必须防止缓冲区被垃圾收集,直到JNI操作完成。)为了实现这一点,我实现了一个基本上等同于此的方法:privatestaticvoidkeepReference(finalObjectobject){Runnablerunnable=newRunnab
当我们可以通过实现Runnable并将其传递给Thread构造函数来实现相同的功能时,允许用户通过扩展Thread类来创建线程的本质是什么。 最佳答案 achievethesamefunctionalitybyimplementingRunnableandpassittotheThreadconstructor扩展Thread的使用不限于Runnable。例如你可以changethebehaviorofsomemethods或添加您自己的线程本地信息(始终可以通过Thread.currentThread()访问)。
好的,我知道创建新线程并在Java中运行它的两种标准方法:在一个类中实现Runnable,定义run()方法,并将该类的一个实例传递给一个新的Thread.当调用线程实例上的start()方法时,会调用类实例的run方法。让类派生自Thread,这样它就可以覆盖方法run(),然后当一个新实例的start()方法被调用,调用被路由到覆盖的方法。在这两种方法中,基本上都会创建一个新的Thread对象并调用其启动方法。然而,在第二种方法中,调用被路由到用户定义的run()方法的机制非常清楚,(这是一个简单的运行时多态性),我不明白如何对Thread对象上的start()方法的调用被路由到实
我正在开发一个多线程应用程序来连接到外部服务器-每个服务器都在单独的线程上-并且在有输入之前将被阻塞。其中每一个都扩展了Thread类。为了便于解释,我们称这些为“连接线程”。所有这些连接线程都存储在并发HashMap中。然后,我允许调用RESTfulWeb服务方法来取消任何线程。(我使用的是Grizzly/Jersey,所以每次调用都是一个单独的线程。)我检索特定的连接线程(从hashmap)并调用它的interrupt()方法。那么,问题来了,在连接线程中,我如何捕获InterruptedException?(当连接线程被外部RESTful命令停止时,我想做一些事情。)
为什么Java的scheduleWithFixedDelay使用Runnable而不是包装runnable的FutureTask?这可以很容易地用两个不同的代码示例来展示:ScheduledExecutorServiceexecutorService=Executors.newSingleThreadScheduledExecutor();executorService.scheduleWithFixedDelay(newFutureTask(newCallable(){@OverridepublicIntegercall()throwsException{System.out.pri
这个问题在这里已经有了答案:"implementsRunnable"vs"extendsThread"inJava(43个回答)关闭7年前。我只是学习线程的理论。还有Thread和Runnable。classAextendsThread{publicvoidrun(){while(true){System.out.println("Hi");}}}classBimplementsRunnable{publicvoidrun(){System.out.println("Hi");}}Thread有丰富的API,为什么我要使用Runnable而不是Thread?谢谢。
我需要在主类的main()方法中定义一个共享变量。我需要两个线程才能访问该共享变量。我通过实现Runnable接口(interface)和实现接口(interface)的抽象run()方法来创建线程。我如何从实现Runnable接口(interface)的类中定义的run()方法中引用主类的main()方法中定义的共享变量?显然,仅按名称调用它们是行不通的-因为它们出现在我的Runnable类的范围之外。编辑-抱歉,这是一个简单的例子publicClassDoThreadimplementsRunnable{publicvoidrun(){sharedVar+=1}}并在一个单独的.c
Javadocs说明如果我们在创建新线程时提供一个Runnabletarget,该线程的.start()将运行run()方法提供的可运行。如果是这样的话,这个测试代码不应该打印“a”(而不是打印“b”)吗?publicclasstest{publicstaticvoidmain(String[]args){Runnabler=newRunnable(){@Overridepublicvoidrun(){System.out.println("a");}};Threadt=newThread(r){@Overridepublicvoidrun(){System.out.println("
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Java:“implementsRunnable”vs.“extendsThread”Java提供了两种创建Thread类的选项,即通过实现Runnable或通过扩展Thread类。我知道实现Runnable可能有很多原因,但不确定扩展Thread类以创建自己的Thread类的场景是什么?能否请您提供扩展Thread似乎可行或更好的选择或优势的场景...有一个Question在线程上,但这没有回答我的问题