标签: multithreading

函数调用超时

我正在调用Python中的一个函数,我知道它可能会停止并迫使我重新启动脚本.

如何调用该函数或我将其包装成什么,以便如果它花费的时间超过5秒,脚本会取消它并执行其他操作?

python multithreading timeout python-multithreading

259
推荐指数
14
解决办法
27万
查看次数

如何在Java中正确停止Thread?

我需要一个解决方案来正确地停止Java中的线程.

我有IndexProcessor实现Runnable接口的类:

public class IndexProcessor implements Runnable {

    private static final Logger LOGGER = LoggerFactory.getLogger(IndexProcessor.class);

    @Override
    public void run() {
        boolean run = true;
        while (run) {
            try {
                LOGGER.debug("Sleeping...");
                Thread.sleep((long) 15000);

                LOGGER.debug("Processing");
            } catch (InterruptedException e) {
                LOGGER.error("Exception", e);
                run = false;
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我有ServletContextListener开始和停止线程的类:

public class SearchEngineContextListener implements ServletContextListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(SearchEngineContextListener.class);

    private Thread thread = null;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        thread = new Thread(new …
Run Code Online (Sandbox Code Playgroud)

java multithreading listener

259
推荐指数
6
解决办法
54万
查看次数

为什么JavaScript不支持多线程?

这是一个刻意的设计决定还是我们当前浏览器的问题,将在未来版本中得到纠正?

javascript browser multithreading

255
推荐指数
7
解决办法
13万
查看次数

254
推荐指数
3
解决办法
22万
查看次数

为什么wait()始终处于同步块中

我们都知道,为了调用Object.wait(),这个调用必须放在synchronized块中,否则IllegalMonitorStateException抛出一个.但是这个限制的原因是什么?我知道wait()释放监视器,但为什么我们需要通过使特定块同步显式获取监视器,然后通过调用释放监视器wait()

如果可以wait()在同步块之外调用,保留它的语义 - 暂停调用程序线程,可能造成的损害是什么?

java concurrency multithreading wait

250
推荐指数
3
解决办法
13万
查看次数

同时运行多个AsyncTasks - 不可能?

我正在尝试同时运行两个AsyncTasks.(平台是Android 1.5,HTC Hero.)但是,只有第一个被执行.这是一个描述我的问题的简单片段:

public class AndroidJunk extends Activity {
 class PrinterTask extends AsyncTask<String, Void, Void> {
     protected Void doInBackground(String ... x) {
      while (true) {
       System.out.println(x[0]);
       try {
        Thread.sleep(1000);
       } catch (InterruptedException ie) {
        ie.printStackTrace();
       }
      }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new PrinterTask().execute("bar bar bar");
        new PrinterTask().execute("foo foo foo");

        System.out.println("onCreate() is done.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我期望的输出是:

onCreate() is done.
bar bar bar
foo foo foo
bar bar bar
foo foo foo
Run Code Online (Sandbox Code Playgroud)

等等.但是,我得到的是:

onCreate() is done. …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-asynctask

249
推荐指数
4
解决办法
17万
查看次数

带参数的ThreadStart

如何使用C#中的参数启动一个线程?

c# multithreading

248
推荐指数
10
解决办法
34万
查看次数

如何超时一个线程

我想在一段固定的时间内运行一个线程.如果它没有在那段时间内完成,我想杀死它,抛出一些异常,或以某种方式处理它.怎么做到呢?

我从这个线程 中发现的一种方法是在Thread的run()方法中使用TimerTask.

有没有更好的解决方案呢?

 
编辑:添加赏金,因为我需要一个更清晰的答案.下面给出的ExecutorService代码没有解决我的问题.为什么我应该在执行后睡觉()(一些代码 - 我没有处理这段代码)?如果代码完成并且sleep()被中断,那怎么可能是timeOut?

需要执行的任务不在我的控制范围内.它可以是任何一段代码.问题是这段代码可能会遇到无限循环.我不希望这种情况发生.所以,我只想在一个单独的线程中运行该任务.父线程必须等到该线程完成并且需要知道任务的状态(即它是否超时或发生了一些异常或者是否成功).如果任务进入无限循环,我的父线程会无限期地等待,这不是一个理想的情况.

java multithreading timeout timer

246
推荐指数
7
解决办法
23万
查看次数

如何使函数等到使用node.js调用回调

我有一个简化的功能,如下所示:

function(query) {
  myApi.exec('SomeCommand', function(response) {
    return response;
  });
}
Run Code Online (Sandbox Code Playgroud)

基本上我希望它调用myApi.exec,并返回回调lambda中给出的响应.但是,上面的代码不起作用,只是立即返回.

只是为了一个非常hackish尝试,我尝试了下面没有工作,但至少你明白了我想要实现的目标:

function(query) {
  var r;
  myApi.exec('SomeCommand', function(response) {
    r = response;
  });
  while (!r) {}
  return r;
}
Run Code Online (Sandbox Code Playgroud)

基本上,什么是一个好的'node.js /事件驱动'的方式来解决这个问题?我希望我的函数等到调用回调,然后返回传递给它的值.

javascript multithreading callback node.js

246
推荐指数
8
解决办法
41万
查看次数

rxJava调度程序用例

在RxJava中有5种不同的调度程序可供选择:

  1. immediate():创建并返回一个在当前线程上立即执行工作的Scheduler.

  2. trampoline():创建并返回一个调度程序,该调度程序对当前工作完成后要执行的当前线程进行排队.

  3. newThread():创建并返回一个Scheduler,为每个工作单元创建一个新的Thread.

  4. computation():创建并返回用于计算工作的Scheduler.这可以用于事件循环,处理回调和其他计算工作.不要在此调度程序上执行IO绑定的工作.使用调度程序.io()代替.

  5. io():创建并返回一个用于IO绑定工作的Scheduler.该实现由Executor线程池支持,该线程池将根据需要增长.这可用于异步执行阻塞IO.不要在此调度程序上执行计算工作.使用调度程序.计算()而不是.

问题:

前3个调度程序非常自我解释; 但是,我对计算io有点困惑.

  1. 究竟什么是"IO限制工作"?它用于处理streams(java.io)和files(java.nio.files)吗?它用于数据库查询吗?它是用于下载文件还是访问REST API?
  2. 如何计算()从不同newThread() ?是每次所有的calculate()调用都在单个(后台)线程而不是新的(后台)线程上吗?
  3. 为什么在进行IO工作时调用calculate()会很糟糕?
  4. 为什么在进行计算工作时调用io()会很糟糕?

java multithreading thread-safety rx-java rx-android

245
推荐指数
2
解决办法
2万
查看次数