标签: java-threads

Java中的"实现Runnable"与"扩展线程"

从我在Java中使用线程的时间开始,我发现了这两种编写线程的方法:

implements Runnable:

public class MyRunnable implements Runnable {
    public void run() {
        //Code
    }
}
//Started with a "new Thread(new MyRunnable()).start()" call
Run Code Online (Sandbox Code Playgroud)

或者,用extends Thread:

public class MyThread extends Thread {
    public MyThread() {
        super("MyThread");
    }
    public void run() {
        //Code
    }
}
//Started with a "new MyThread().start()" call
Run Code Online (Sandbox Code Playgroud)

这两个代码块有什么显着差异吗?

java multithreading runnable implements java-threads

2023
推荐指数
30
解决办法
67万
查看次数

wait()和sleep()之间的区别

一个wait()sleep()在线程之间有什么区别?

我的理解是wait()-ing Thread仍处于运行模式并使用CPU周期但是sleep()-ing不会消耗任何CPU周期吗?

为什么我们 wait()sleep():如何实现他们在一个较低的水平有什么不同?

java multithreading sleep java-threads

1158
推荐指数
15
解决办法
87万
查看次数

服务,异步任务和线程之间的区别?

Service,Async Task&Thread之间有什么区别.如果我没有错,他们都习惯在后台做一些事情.那么,如何决定使用哪个以及何时使用?

android android-service android-asynctask java-threads

145
推荐指数
4
解决办法
8万
查看次数

如果我在同一个类上同步两个方法,它们可以同时运行吗?

如果我在同一个类上同步两个方法,它们可以同时在同一个对象上运行吗?例如:

class A {
    public synchronized void methodA() {
        //method A
    }

    public synchronized void methodB() {
        // method B
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我不能methodA()在两个不同的线程中对同一个对象运行两次.同样的事情methodB().

但是,在运行methodB()时我可以在不同的线程上methodA()运行吗?(同一个对象)

java multithreading synchronized java-threads

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

如何在没有IllegalMonitorStateException的Java中使用wait和notify?

我有2个矩阵,我需要将它们相乘,然后打印每个单元格的结果.一旦一个单元格准备就绪,我需要打印它,但是例如我需要在单元格[2] [0]之前打印[0] [0]单元格,即使[2] [0]的结果已经准备好了.所以我需要按顺序打印它.所以我的想法是让打印机线程等待,直到multiplyThread通知它正确的单元格已准备好打印,然后printerThread将打印单元格并返回等待等等.

所以我有这个线程来进行乘法运算:

public void run() 
{
    int countNumOfActions = 0; // How many multiplications have we done
    int maxActions = randomize(); // Maximum number of actions allowed

    for (int i = 0; i < size; i++)
    {       
        result[rowNum][colNum] = result[rowNum][colNum] + row[i] * col[i];
        countNumOfActions++;
        // Reached the number of allowed actions
        if (countNumOfActions >= maxActions)
        {
            countNumOfActions = 0;
            maxActions = randomize();
            yield();
        }   
    }
    isFinished[rowNum][colNum] = true;
    notify();
}
Run Code Online (Sandbox Code Playgroud)

打印每个单元格结果的线程:

public …
Run Code Online (Sandbox Code Playgroud)

java multithreading exception java-threads

128
推荐指数
6
解决办法
23万
查看次数

在Java中将ExecutorService转换为守护进程

我在Java 1.6中使用ExecutoreService,简单地开始

ExecutorService pool = Executors.newFixedThreadPool(THREADS). 
Run Code Online (Sandbox Code Playgroud)

当我的主线程完成时(以及线程池处理的所有任务),此池将阻止我的程序关闭,直到我显式调用

pool.shutdown();
Run Code Online (Sandbox Code Playgroud)

我可以避免不得不通过某种方式将此池使用的内部线程管理变为deamon线程来调用它吗?或者我在这里遗漏了一些东西.

java multithreading executorservice threadpool java-threads

68
推荐指数
5
解决办法
3万
查看次数

如果我们有足够的处理器来服务所有线程,那么Thread.yield()会做任何事情吗?

如果我们在具有两个处理器的机器上有两个正在运行的线程,并且Thread.yield()在其中一个线程中调用,那么是否有理由不做任何事情(调度程序实际上会忽略请求),因为我们有足够的处理器来服务正在运行的线程?

java concurrency multithreading thread-synchronization java-threads

39
推荐指数
3
解决办法
1255
查看次数

Thread类的onSpinWait()方法

在学习Java 9时,我遇到了一种新的Thread类方法,叫做onSpinWait?.根据javadocs,这个方法用于此:

表示调用者暂时无法进展,直到其他活动发生一个或多个操作为止.

有人能帮助我理解这种方法给出一个真实的例子吗?

java concurrency multithreading spinlock java-threads

29
推荐指数
4
解决办法
4117
查看次数

线程局部握手的解释

作为公认的一部分JDK 10JEP 312:线程局部握手提出.

我试图理解它的描述,但我仍然不相信我的想法是正确的.

它本质上是尝试恢复类似于弃用的Thread.destroy()的东西吗?

这个界面在理论上怎么样?

java multithreading java-threads java-10

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

Java线程状态转换,WAITING到BLOCKED还是RUNNABLE?

SO共识与互联网上几乎每个Java线程状态图之间似乎存在差异; 具体来说,关于 WAITING之后的线程状态转换notify()或被notifyAll()调用...

  • 等待永远不会直接进入RUNNABLE
  • 该线程正在等待直到通知...然后它变为 BLOCKED ...
  • 一旦通知此线程,它将无法运行 ...这 ...阻塞状态.

所以关于SO的共识是:一个线程从调用之后转换WAITING到; 或者; 下图说明了绿色的这种转变.BLOCKEDnotify()notifyAll()

为什么网上的大多数状态图都说明了转换WAITINGRUNNABLE,而不是BLOCKED?红色描绘显示错误的过渡; 我错过了什么吗?

在此输入图像描述

java multithreading thread-state java-threads

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