标签: runnable

使用 Runnable 或 Thread 的 Java 线程问题

我正在尝试使用合并排序来实现多线程。我让它在将数组切成两半的地方创建新线程。
数组的排序取决于:[数组的大小] vs [创建新线程的次数] 例如:如果我让它在大小为 70 的数组上仅创建两个线程,则数组将被排序,但如果我让它创建 6,它将返回未排序的。我认为可能的一件事是线程没有同步,但我使用了 threadName.join()

这是一些代码:merge.java

import java.util.Random;

public class merge implements Runnable {
    int[] list;
    int length;
    int countdown;

    public merge(int size, int[] newList, int numberOfThreadReps, int firstMerge) {
        length = size;
        countdown = numberOfThreadReps;
        list = newList;
        if (firstMerge == 1)
            threadMerge(0, length - 1);
    }

    public void run() {
        threadMerge(0, length - 1);
    }

    public void printList(int[] list, int size) {
        for (int i = 0; i < size; i++) {
            System.out.println(list[i]);
        } …
Run Code Online (Sandbox Code Playgroud)

java multithreading runnable

2
推荐指数
1
解决办法
1310
查看次数

使用 BlockingQueue 时 Runnable 不会停止

我有一个 Runnable 即使条件设置为停止也不会停止。不知道为什么会这样。有时一些线程仍然活着,其他则不是。我已经让它运行了一个多小时,看看它是否会停止,但它不会。它与我传递参数的方式有关吗?

public class ParserWorker implements Runnable {

    private BlockingQueue<String> queue = null;
    private ZipReader zip = null;

    public ParserWorker(BlockingQueue<String> queue, ZipReader zip) {
        this.queue = queue;
        this.zip = zip;
    }

    @Override
    public void run() {
        try {
            while (!queue.isEmpty() || !zip.isClosed()) {
                String line = queue.take();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是开始一切的课程。

public Start() throws InterruptedException   {
    File zipFile = new File("C:\\development\\data2.zip");
    BlockingQueue<String> queue = new ArrayBlockingQueue<String>(1024);

    ZipReader zip = new ZipReader(queue, zipFile); …
Run Code Online (Sandbox Code Playgroud)

java queue multithreading runnable

2
推荐指数
1
解决办法
895
查看次数

android mediaSession getPosition() 总是返回 0

我正在尝试获取当前位置,以便我可以在我的媒体播放器应用程序中推进搜索栏。但是,每次我打电话:

getSupportMediaController().getPlaybackState().getPosition();
Run Code Online (Sandbox Code Playgroud)

如果媒体正在播放,则返回 0,如果媒体暂停,则返回 -1。我搜索了很多没有成功的解决方案,我尝试了一切。

顺便说一下,我将上面的代码放在一个 runner 中,以便它每 1 秒执行一次。

android runnable android-mediaplayer android-seekbar android-mediasession

2
推荐指数
1
解决办法
1170
查看次数

Platform.runLater() 如何发挥作用?

我有一个简单的应用程序,它在后台更新数据,当它更新时,它会禁用所有其他按钮并启用 TextArea 来显示进度。

脚步:

  1. 禁用 mainUI 中的所有其他按钮(按钮名称:plotButton)

  2. 启用显示更新已开始的 TextArea(TextArea 名称:infoLogTextArea)

  3. 然后只启动更新方法(update() 抛出异常)。

这是代码:

@FXML
    public void handleUpdateButton() {
        
        infoLogTextArea.setVisible(true);
        infoLogTextArea.appendText("Please wait while downloading data from internet.....\n");      
        plotButton.setDisable(true);
        updateButton.setDisable(true);
            
        if(c!=null) {
            Runnable task = new Runnable() {
                @Override
                public void run() {
                    // Thread.sleep(10000); -> sleep for 10secs
                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                c.updateData();
                                infoLogTextArea.appendText(c.getErrorLog().toString());
                                plotLabel.setText(c.getCityData().size()+" cities found and updated from internet");
                                infoLogTextArea.appendText("Successfully updated the data from Internet\n");
                            }catch (IOException e) {
                                infoLogTextArea.setText("Couldnot update the data …
Run Code Online (Sandbox Code Playgroud)

java multithreading javafx runnable

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

如何在android中停止此线程?

在我的应用程序中,我使用此线程在时钟上旋转秒针.但问题是当我关闭活动时,线程仍然保持运行.我想停止线程,因此它无法影响设备的Bettry.

下面是我的活动代码,我在旋转时钟的秒针:

 public class ClockActivity extends Activity implements OnClickListener{
    private Button chimeBtn;
    private ImageView img;
    private Thread myThread = null;

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


        Runnable runnable = new CountDownRunner();
        myThread = new Thread(runnable);
        myThread.start();

        chimeBtn = (Button) findViewById(R.id.chimeBtn);
        chimeBtn.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.chimeBtn:
                playSound(R.raw.one_bell);
                break;
        }
    }
    public void playSound(int resources){

         MediaPlayer mp = MediaPlayer.create(getApplicationContext(), resources);
            mp.start();


    }

    private void doPlay(){
        new Thread(new Runnable() {

            @Override
            public void run() {
                // …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-ndk runnable

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

类实现了Runnable,但未定义start()和sleep()方法

我创建了一个名为Threadimplements 的类,Runnable但由于某种原因我无法调用start()sleep()方法.每当我尝试这样做时,我都会收到错误,说这些方法对于类来说是未定义的,并建议我创建它们.所以我创建了一个新项目并复制了一个示例代码,以查看我自己的代码是否有问题,并且我收到了相同的错误.这是示例代码:

class Thread implements Runnable {
    private int a;
    public Thread (int a) {
        this.a = a;
    }
    public void run() {
        for (int i = 1; i <= a; ++i) {
            System.out.println(Thread.currentThread().getName() + " is " + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我自己的代码:

public class Thread extends PID implements Runnable {
    public Thread() {};                      // Empty constructor for thread object
    public void run() …
Run Code Online (Sandbox Code Playgroud)

java multithreading sleep interface runnable

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

即使线程没有共享数据,您是否应该使用runnable?

我一直在编写一个多线程的java程序.在我进步之前,我在思考如何最好地编写程序.

我读了runnable和thread之间的区别以及我们应该使用什么和不应该使用什么.不过我有一个问题.即使线程不共享数据(即相同的可运行类对象),遵循runnable实现进行线程也是好的吗?

我最终会创建不同的可运行对象,从而占用内存.我的另一个想法是池化可运行对象并更改它们保存的值并将其分配给线程.从而仅具有一组可运行的对象,从而更好地利用存储器.

示例代码:

public class MrRunnable implements Runnable {
    private String toFireUrl;

    MrRunnable(String url){
    }

    @Override
    public void run() {
        // do some function here
    }
}

public class Main {

    public static void main(String[] args) {
        // We will create 500 threads
        for (int i = 0; i < 500; i++) {
            Runnable task = new MrRunnable("some new url");
            Thread worker = new Thread(task);
            //start the thread
            worker.start();
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

这里我创建了一个可运行对象的新实例,我的线程不共享数据.那么这种方式是否合理?或者更好的是创建一个可运行的对象池,我让我的线程操纵他们的内容并使用它?

java multithreading runnable

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

程序在Eclipse中运行,但是导出的可运行jar文件将无法打开?

看来这是一个常见问题,但以前的帖子似乎都没有解决我的问题。

我相信我已将其范围缩小到一个问题。使用InputStream的任何应用程序都不会打开,但是我所有其他应用程序都可以正常运行。

该应用程序在Eclipse中运行良好,但是当我尝试运行jar文件时,该窗口甚至无法打开。

任务管理器显示它弹出大约一两秒钟,然后消失。

我已经尝试了导出时处理库的所有三个选项,但没有一个可以解决此问题。

谁能解释一下?

java eclipse jar file runnable

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

Java中的函数编程语法

我正在阅读有关函数式编程及其在Java中的实现的内容.我遇到的这个例子与Java中的面向对象编程有一些不同的语法.功能编程是否有一些不同的语法?

public class Hello {
    Runnable r1 = ()->(System.out.println(this);};
    Runnable r2 = ()->(System.out.println(toString());};
    public String toString(){ return “Howdy!”;}
    public static void main(String args) {
        new Hello().r1.run();
        new Hello().r2.run();
    }
Run Code Online (Sandbox Code Playgroud)

在完成代码之后,我可以理解括号不匹配,语法与OOP的Java语法不相似.

此代码无法编译并在所有行上给出以下错误:

Hello.java:19: error: class, interface, or enum expected
Runnable r2 = ()->(System.out.println(toString());};
Run Code Online (Sandbox Code Playgroud)

我错过了什么?如果这个程序是正确的,它会打印什么?我在Ubuntu 14.04.3上使用javac 1.8.0_66

谢谢.

java functional-programming runnable

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

如果没有AsyncTask,则在后台运行线程并更新UI线程

我正在尝试从Kotlin中的后台线程更新回收者视图的内容。我没有使用AsyncTask。

这是我的代码,我想知道是否有比这更好的方法:

在我的MainActivity中,我将progressThread作为成员变量。

 var progressThread = Thread()
Run Code Online (Sandbox Code Playgroud)

然后在我想首先运行线程的方法中,我正在定义它...就像

        progressThread = Thread (
    Runnable {
        kotlin.run {
            try {
            while (i <= 100 && !progressThread.isInterrupted) {
                Thread.sleep(200)
                //Some Logic
                runOnUiThread {
                    //this runs in ui thread

                }
                i++
            }
            }catch (e:InterruptedException){
                progressThread.interrupt()
            }
        }
    })
Run Code Online (Sandbox Code Playgroud)

之后,我将以与

 progressThread.start()
Run Code Online (Sandbox Code Playgroud)

为了停止它,我有一个监听器来取消进度,并且在该监听器的回调中,我写了:

 progressThread.interrupt()
Run Code Online (Sandbox Code Playgroud)

multithreading runnable kotlin

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