从我在Java中使用线程的时间开始,我发现了这两种编写线程的方法:
用implements Runnable:
public class MyRunnable implements Runnable {
public void run() {
//Code
}
}
//Started with a "new Thread(new MyRunnable()).start()" call
Run Code Online (Sandbox Code Playgroud)
或者,用extends Thread:
public class MyThread extends Thread {
public MyThread() {
super("MyThread");
}
public void run() {
//Code
}
}
//Started with a "new MyThread().start()" call
Run Code Online (Sandbox Code Playgroud)
这两个代码块有什么显着差异吗?
我正在编写一个包含5个线程的应用程序,它们可以同时从Web获取一些信息,并在缓冲类中填充5个不同的字段.
当所有线程完成工作时,我需要验证缓冲区数据并将其存储在数据库中.
我该怎么做(当所有线程完成工作时收到警报)?
我是Swift的新手,当我遇到逃脱闭合时,我正在阅读手册.我根本没有得到手册的描述.有人可以用简单的语言向我解释一下Swift中有什么逃避封锁.
我已经理解了Java Runnable与Callable接口之间的区别.从Java 1.5开始,在Runnable接口中添加了其他功能,并且Callable为了保持向后兼容性而调用了这些功能.
我现在的问题是我们有Callable接口,我们总是会使用它吗?不使用Callable和使用的用例有哪些Runnable?
(这是关于它们之间有什么区别的好文章)
谁能解释我,编程语言理论中协方差和逆变的概念?
我是Java的线程编程的新手,因此这个基本问题.(我检查过,但以前找不到这个问题)
我读到可以通过继承Thread类或通过实现Runnable接口来创建线程.我看到一个代码同时出现在同一个类中.
public class ThreadExample extends Thread implements Runnable {
}
Run Code Online (Sandbox Code Playgroud)
我想知道这种情况会是什么样的,如果有什么优势,那是什么呢.
我是Java的新手,我正在阅读多线程的概念,在进行多线程的各种实现时,我经历了这两个概念.这在Java问题中Runnable和Callable接口之间的区别指出了两者之间的区别以及使用的位置.
我怀疑Callable是否能够完成Runnable的所有功能,为什么这么多人使用Runnable而不是可调用?与Runnable Inteface相比,实现Callable接口是否有额外的开销?
我有一个Worker类,implements Runnable并且有一个run()方法可以在发生冲突时引发异常,并提前返回.如果是,则需要将该线程放回队列中再次运行.
从这个问题来看,似乎我需要重写Callable.那是对的吗?有没有办法做到这一点Runnable?
我的问题是在什么情况下或在什么情况下最好使用可调用接口而不是简单的单一方法功能接口。
假设我们有一个带有基于任务的事件处理系统的游戏。它每秒循环一个事件队列。每个事件都涉及一名玩家。在什么情况下最好这样做
Consumer<Player> c1 = (player) -> player.sendMessage("hey");
Run Code Online (Sandbox Code Playgroud)
超过
Runnable r1 = () -> player.sendMessage("hey");
Run Code Online (Sandbox Code Playgroud)
刚刚发现这个问题:Java 中 Runnable 和 Callable 接口之间的区别。它解释了有关多线程环境的一些要点,但我所说明的情况涉及单线程环境。那还有关系吗?
假设以下简化示例.设B表示处理某些栅格数据的类:
import java.awt.image.BufferedImage;
public class B implements Runnable{
private boolean c;
private Runnable f;
public B (boolean c_, Runnable f_) { c = c_; f = f_;}
public BufferedImage process() {
//Some operations
BufferedImage output = null;
if (c) output = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
return output;
}
public void run() { process();}
}
Run Code Online (Sandbox Code Playgroud)
该处理()方法可以但可能不产生输出评价者.由于计算成本,该过程在单独的线程中运行.
设A表示将在其中运行过程的类.它还包含一些等待线程完成后的后处理步骤:
import java.awt.image.BufferedImage;
public class A {
public A(){}
public void compute() {
boolean c = true;
B b = new B( c, …Run Code Online (Sandbox Code Playgroud) java ×10
runnable ×4
callable ×2
android ×1
c# ×1
c++ ×1
closures ×1
concurrency ×1
consumer ×1
covariance ×1
implements ×1
java-threads ×1
return ×1
swift ×1
task ×1
wait ×1