标签: runnable

如何在所有线程完成后执行一段代码

我有一个日志代码,需要在所有Threadss 执行后执行.

Thread t1 = new MyThread();
Thread t2 = new MyThread();
t1.run();
t2.run();

doLogging();
Run Code Online (Sandbox Code Playgroud)

是否有任何方法doLogging()只有在两个线程完成其处理后才能执行.现在,doLogging()只要t1和t2开始,就会调用它.

java multithreading runnable

7
推荐指数
2
解决办法
5732
查看次数

从Android UI线程中获取大量计算

我的Android应用程序使用了一个特别大的计算,它会使系统崩溃,因为它位于Activity中的UI线程上.我对多线程没什么信心,所以我想得到一些关于如何正确执行的提示.这就是我所拥有的

class ActivtyName extends Activity{
boolean threadcomplete = false;

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//stuff

Runnable newthread = new Runnable(){

            @Override
            public void run() {
                doBigComputation();
                threadcomplete=true;
            }

        };

        newthread.run();

        boolean b = true;
        while(b){
            if(threadcomplete){
                b=false;
                startTheApp();
            }
        }

}
}
Run Code Online (Sandbox Code Playgroud)

现在,我很确定我做的不是"正确".(它似乎工作.这个系统不会崩溃).基本上,我不确定如何在没有此布尔值,threadcomplete的情况下告知UI线程newthread已完成计算.有没有"正确"的方法来做到这一点?

java multithreading android runnable heavy-computation

7
推荐指数
1
解决办法
4224
查看次数

检查Android处理程序是否有回调

我有一些设置计时器的代码,但是如果用户在使用它时设置计时器,我需要删除运行计时器的runnable并再次启动它.但是当没有处理程序回调runnable存在并且调用此代码时,它会崩溃我的应用程序.所以我需要检查一个处理程序是否正在运行,如果是,然后结束它并重新启动它,但查看文档和其他Stackoverflow问题,我看不出这是否可行.

这是我的代码,我已经对代码进行了评论,只有在处理程序runnable存在时才应该执行:

    submitTimer.setOnClickListener(new View.OnClickListener(){

        public void onClick(View v) {
            String s = timer.getText().toString();
            if(!s.equals(""))
            {
//I NEED TO CHECK A RUNNABLE HANDLER EXISTS AND IF SO THEN RUN THIS CODE, IF NOT IGNORE THIS CODE
            Map.handler.removeCallbacks(Map.getRunnable());
            Map.runnable.run();
//I NEED TO CHECK A RUNNABLE HANDLER EXISTS AND IF SO THEN RUN THIS CODE, IF NOT IGNORE THIS CODE
            int l = Integer.parseInt(s);
            Map.timerinmins = l;
            timer.setHint("Current Timer is "+Map.timerinmins);
            timer.setText("");
            Toast.makeText(Preferences.this, "Timer is set!", Toast.LENGTH_SHORT).show();
            }

            else
            {

                Toast.makeText(Preferences.this, "No value …
Run Code Online (Sandbox Code Playgroud)

android handler runnable

7
推荐指数
2
解决办法
9100
查看次数

石英作业比.线程立即执行一次任务

假设我有一些工作单元需要完成,我想相对于我的应用程序的其余部分进行异步操作,因为它可能需要很长时间,例如10秒到2分钟.要做到这一点,我正在考虑两个选择:

  1. 使用简单的触发器设置Quartz作业,只能触发一次并尽快触发.
  2. 创建一个Runnable实例,将其移交给一个Thread,然后调用run();.

在上述情况下,我有以下问题:

  1. 什么使用Quartz作业让我觉得线程没有?
  2. 什么使用runable让我使用石英作业不?
  3. 就最佳实践而言,应该使用什么标准来确定此用例的Quartz作业和runnables?

java multithreading quartz-scheduler runnable

7
推荐指数
1
解决办法
1960
查看次数

这个Runnable是否可以防止内存泄漏?

我是Java的初学者,并创建了一个简单的Java Android代码片段,在1.5秒后我在Runnable中将TextViewfrom 更改Hello WorldHola Mundo.它完美无缺,基本上WeakReference应该防止这种内存泄漏发生吗?我怀疑是否在设备方向发生时绝对没有内存泄漏.我很想检查这个,但无法在我模拟的Android中改变方向.

这是代码:

package com.example.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.util.Log;
import java.lang.ref.WeakReference;

public class HelloWorldActivity extends Activity
{
    private Handler h = new Handler();
    private static TextView txtview;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txtview = (TextView) findViewById(R.id.mainview);

        h.postDelayed(new WeakRunnable(txtview),1500);
    }

    private static final class WeakRunnable implements Runnable {
        private final WeakReference<TextView> mtextview; …
Run Code Online (Sandbox Code Playgroud)

java android memory-leaks weak-references runnable

7
推荐指数
2
解决办法
6140
查看次数

Java:当被另一个线程中断时,如何在线程上捕获InterruptedException?

我正在开发一个多线程应用程序来连接外部服务器 - 每个都在不同的线程上 - 并且会被阻塞直到有输入.其中每个都扩展了Thread类.为了便于解释,我们称之为"连接线程".

所有这些连接线程都存储在并发hashmap中.

然后,我允许RESTful Web服务方法调用取消任何线程.(我正在使用Grizzly/Jersey,所以每次调用都是一个线程.)

我检索特定的连接线程(来自hashmap)并在其上调用interrupt()方法.

那么,这是一个问题,在连接线程中,我如何捕获InterruptedException?(当外部RESTful命令停止连接线程时,我想做点什么.)

java multithreading runnable

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

我如何使用wait/notifyAll

我想知道在java中是否有可能有一个实现Runnable的类,如果该类的对象进入wait()(所以线程停止运行直到它收到一个信号),同一个类的另一个对象可以通知它继续跑步?

理想情况下,我希望能够做到的是:

public class ThreadClass implements Runnable{

 public void run(){
 //.. Does some arbitrary work

  if( aCondition){  //have it wait until something signals it to contine exection.
 this.wait();
 }

 //Continues to do more work.

 //finished whatever it needed to do. Signal all other threads of this object type to continue their work.
 this.notifyAll();

 }
}
Run Code Online (Sandbox Code Playgroud)

这是可能的,如果是这样,我该怎么做呢?我试图使它成为对象本身可以管理自己和所有其他相同类型的对象.所以没有人使用这个类必须担心管理它.

java multithreading notify wait runnable

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

在Handler中执行所有已安排的(postDelayed)runnable

我使用一个Handler,它发布了一些Runnablevia postDelayed(r, DELAY_TIME),但我需要Runnables在发布新的via之前执行所有操作postDelayed.

任何好的想法如何尽可能简单地实现这一点?

编辑:

我希望它基本上像这样:

Runnable r = new Runnable() {
    // Do some fancy action
};

if (mHandler.runnablesScheduled) {
    mHandler.flushAllScheduledRunnables();
}
mHandler.postDelayed(r, DELAY);
Run Code Online (Sandbox Code Playgroud)

android handler runnable android-handler

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

Android:哪个线程调用.onSensorChanged?

我已经阅读了一些关于哪个线程调用各种回调方法的讨论,例如与Sensors相关的回调方法.大多数人声称UI线程调用回调 - 即使涉及单独的工作线程.我们对此有所了解吗?

请考虑以下情形:单独的类实现Runnable和SensorListener.UI线程(在onCreate期间)启动runnable,然后返回其他业务.现在独立的工作线程在其自己的类中注册SensorListener.

请注意,UI线程永远不会与SensorManager或SensorListener进行任何交互.唯一涉及与Sensor有关的线程,以及它所知道的唯一类和成员方法,是工作线程及其类.

我很难想象UI线程会在这种情况下调用回调.然而,在线讨论非常"自信".有人知道吗?

谢谢!

multithreading android callback sensor runnable

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

如何实现具有超时功能的 Runnable?

我目前有一个相当简单的 SSL 服务器/客户端项目,涉及标准 Java 后端和 Android 前端。我想在与客户端发送数据后尝试读取服务器的响应。然而,我遇到了一个小问题。服务器并不总是响应,因此我必须以某种方式尝试以异步方式获取响应。(因为 read() 方法是一个阻塞方法)经过一番折腾后,我找到了一个可行的解决方案,但对我来说似乎很奇怪,就像我在做一些可能“危险”的事情。我做的第一件事是创建一个新的 Runnable 和 Thread 对象:

                    //  "reader" is of type "BufferedReader"             

                    Runnable receiveResponse = new Runnable() {
                        boolean stop = false;
                        @Override
                        public void run() {
                            try {
                                new Timer().schedule(new TimerTask() {
                                    @Override
                                    public void run() {
                                        stop = true;
                                    }
                                }, 5000);
                                char receive;
                                StringBuilder responseBuilder = new StringBuilder();
                                while (!stop && ((receive = (char) reader.read()) != END_OF_STREAM_CHAR)) {
                                    responseBuilder.append(receive);
                                }
                                // If the server responds in time I can continue …
Run Code Online (Sandbox Code Playgroud)

java asynchronous timeout runnable

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