小编Bie*_*aja的帖子

从外部获取线程变量的值

可以说我有一个像这样运行的线程:

private boolean working = true;

@Override public void run() {
   working = true;
   // do something
   working = false;
   ....
}
Run Code Online (Sandbox Code Playgroud)

在我的主线程中,我不断推出与之合作的状态

while(threadClassObject.isWorking()) {
    System.out.println(threadClassObject.isWorking());
}
Run Code Online (Sandbox Code Playgroud)

这会有用吗?我试过这个例子,它似乎工作.但有没有办法可以崩溃?如果线程正在改变工作的过程中,例如在mainThread尝试读取它的同时发生了什么?

java multithreading

6
推荐指数
1
解决办法
4277
查看次数

ScheduledExecutorService的多个任务

我目前有一个班级列表,每个班级都会启动一个调度程序,如下所示:

private ScheduledFuture<?> myTask;
private ScheduledExecutorService scheduler;

public startScheduler() {
scheduler = Executors.newScheduledThreadPool( 1 );
    myTask = scheduler.scheduleAtFixedRate(new Runnable() {
          // doing work here
     },
          delay,
          interval,
          TimeUnit.MILLISECONDS );
}
Run Code Online (Sandbox Code Playgroud)

因此,每个类基本上都启动它自己的调度程序,并且只有一个任务。但是据我了解,调度程序可以并行执行并运行更多任务。这些任务(或在我当前的程序中,调度程序)具有不同的延迟和间隔值,并且启动的调度程序的数量对于我来说是未知的(因为用户可以启动新的调度程序并停止运行它们)。所有调度程序并行运行。那么我应该更改我的代码以仅使用一个调度程序吗?我应该选择“ CachedThreadPool”吗?

java multithreading

5
推荐指数
1
解决办法
9153
查看次数

等待 eclipse rcp 应用程序退出时运行的作业

我有一个 Eclipse RCP 应用程序,它定期(每 5 秒)在子线程中执行一些工作。该线程执行一个方法来更新应用程序的状态行以指示工作已完成。它看起来像这样:

protected void updateStatusBar()
{
     Display.getDefault().asyncExec(new Runnable() {
         @Override
         public void run() {
             PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(MainView.ID).
             getViewSite().getActionBars().getStatusLineManager().setMessage("work finished");   
         }
     });
}
Run Code Online (Sandbox Code Playgroud)

它运行良好。我遇到的问题是,当我关闭应用程序时,我会不时收到空指针异常并出现此错误:

平台关闭后发现作业仍在运行。作业应由在关闭期间安排作业的插件取消:>org.eclipse.ui.internal.progress.TaskBarProgressManager$2

问题在于,作业由于异步执行而正在运行,但同时由于应用程序的关闭,所有内容都被破坏了。那么有没有办法获取/等待正在运行的 UI 作业,以便我可以确保作业在应用程序关闭之前完成?

java jobs multithreading eclipse-rcp

5
推荐指数
1
解决办法
2469
查看次数

标签 统计

java ×3

multithreading ×3

eclipse-rcp ×1

jobs ×1