Tag: multithreading

使用Spring线程和TaskExecutor,我如何知道线程何时完成?

好吧,这里可能是一个天真的问题。 我有一项服务需要登录到多个网络设备,在每个设备上运行命令并收集结果。 为了提高速度,我需要同时访问它们并在完成后使用结果,而不是按顺序收集每个设备上的信息。 使用Spring框架和Jsch我可以很容易地正确查询每个设备。 我遇到一些困惑的地方是尝试重新连接bean以使用TaskExecutor来完成此任务。 我无法弄清楚如何知道如何知道线程何时完成。 到目前为止我所拥有的是: public class RemoteCommand { private String user; private String host; private String password; private String command; private List commandResults; private TaskExecutor taskExecutor; public RemoteCommand(String user, String host, String password, TaskExecutor taskExecutor) { setUser(user); setHost(host); setPassword(password); setTaskExecutor(taskExecutor); } /** * @param user the user to set */ public void […]

在Android中运行新线程和UI线程的方法是什么?

据我所知,当我们运行进程时,他们会在主线程中启动它们。 当我们做一些较重的工作时,我们使用一个新线程。 如果我们想修改UI外观,我们使用run on UI。 有人可以向我解释这些线程做了什么以及如何使用它们?

无法在RejectionHandler中获取CallableThread

我有线程池,它将带有RejectionHandler Callable工作线程。 我需要在RejectionHandler获取此Callable任务但无法获取它。 在下面的例子中,我需要执行RejectionHandler的可调用任务的uniqueId。 在RejecitonHandler , Runnable是一个FutureTask ,我希望它应该被转换为Callable worker thread。 请帮我在RejectionHandler中获取Callable Worker线程实例。 import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.FutureTask; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class RejectionDemo { RejectionDemo(){ Random random = new Random(); ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 1, TimeUnit.SECONDS, new ArrayBlockingQueue(2), new RejectionHandlerImpl()); CallableWorkerThread workers[] = new CallableWorkerThread[10]; for (int […]

通知方法如何工作

根据javadoc通知唤醒正在等待此对象监视器的单个线程。 如果任何线程正在等待此对象,则选择其中一个线程被唤醒。 选择是任意的,由实施决定。 线程通过调用其中一个wait方法等待对象的监视器。 我想知道notify如何实现这种行为。 在我读过的许多网站上发送信号但信号在这里意味着什么? notify是否直接向第一个等待线程发送信号,或者它向线程调度程序发送信号?

什么是等待的最佳替代方案…通知低级同步?

据我所知, wait()和notify()已被更好的并发机制所取代。 那么,您可以选择哪种更好的替代方案,比如实现同步队列 ? 他们究竟是什么“更好”? 编辑 :这(“实现同步队列”)是一个面试问题。 可接受的答案不能使用BlockingQueue或其他队列实现。 但是,它可能使用其他同步构造,例如CountDownLatch。 我没有详尽的允许和禁止课程列表 – 使用你的头脑。

如何收听Firebase的setValue完成情况

我想在Firebase中设置类似群聊的内容。 如果您拥有正确的组ID,则可以加入。 问题是Firebase引用始终存在。 它们是动态创建的。 为了允许在加入过程中进行一些错误检查,我想将创建新数据库条目的用户添加到用户表中。 public void createParty() { // you need to be signed in to create a party assertState(DBState.SignedIn); // create a new party ourPartyDatabaseReference = partiesDatabaseReference.push(); usersDatabaseReference = ourPartyDatabaseReference.child(“users”); // write our user to the table of users, now the ourPartyReference actually exists // and if you look for existing users, you […]

为什么抽象方法不能同步?

我正在从CodeRanch读取一个线程,说抽象方法无法同步,因为抽象类无法实例化,这意味着没有锁定对象。 这没有意义,因为抽象类是子类的定义(契约)。 子进程的同步方法的抽象定义不需要锁定。 所有抽象标题都表明孩子必须同步这个方法。 我的逻辑是否正确? 如果没有,有人可以解释为什么我错了吗?

何时使用volatile和synchronized

我知道有很多问题,但我仍然不太明白。 我知道这两个关键字的作用,但我无法确定在某些情况下使用哪个。 这里有几个例子,我试图确定哪个是最好用的。 例1: import java.net.ServerSocket; public class Something extends Thread { private ServerSocket serverSocket; public void run() { while (true) { if (serverSocket.isClosed()) { … } else { //Should this block use synchronized (serverSocket)? //Do stuff with serverSocket } } } public ServerSocket getServerSocket() { return serverSocket; } } public class SomethingElse { Something […]

在继续JavaFX之前更新UI并强行等待

我在这里展示了我欢迎场景的图像。 “ 创建新项目”按钮的当前行为如下所示: Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow(); stage.hide(); Parent root = FXMLLoader.load(getClass().getResource(“/view/scene/configure/NewProjectConfigureScene.fxml”)); Scene scene = new Scene(root); stage.setTitle(“Configure New Project Settings”); stage.setScene(scene); stage.show(); 用文字解释:按下按钮 – >我得到舞台 – >隐藏当前场景 – >切换舞台以获得新场景 – >重新显示舞台。 这种行为是有效的。 我是GUI编程的新手,所以当我解释我需要的东西时,请耐心等待。 我现在正在尝试添加一个小function,当按下Create New Project按钮时,当前场景中出现加载消息,我强制GUI等待几秒钟(这样用户有时间看到这个“loading “消息”,然后继续进入下一个场景。 加载消息看起来像这样。 我真的想要实现这个function,因为加载消息后面的等待可能更直观,从而改善了我在使用程序时的用户体验。 我最初的尝试是做以下事情: statusText.setText(“Please wait…”); // statusText is the “loading message” Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow(); try { […]

为什么线程会阻塞我的JavaFX UI线程?

当用户选择在另一个线程中启动阻止进程的菜单项时,我试图在JavaFX 8应用程序中提供反馈。 在我的实际应用程序中,它是一个文件下载,但我通过示例使用最少的代码创建了一个测试用例: import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.control.MenuButton; import javafx.scene.control.ToolBar; import javafx.scene.control.MenuItem; import javafx.stage.Stage; public class BlockingThreadTestCase extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { MenuItem menuItem = new MenuItem(“Start”); MenuButton menuButton = new MenuButton(); menuButton.setText(“Async Process”); menuButton.getItems().addAll(menuItem); menuItem.setOnAction(event -> { […]