相关疑难解决方法(0)

1705
推荐指数
22
解决办法
123万
查看次数

Java中Runnable和Callable接口之间的区别

在Java中设计并发线程时使用RunnableCallable接口有什么区别,为什么要选择一个而不是另一个呢?

java multithreading interface callable runnable

473
推荐指数
12
解决办法
27万
查看次数

什么是"线程"(真的)?

我一直试图找到一个好的定义,并了解一个线程到底是什么.

似乎我必须遗漏一些明显的东西,但每当我读到一个线程是什么时,它几乎是一个循环定义,一个"线程是一个执行线程"或"一种分为运行任务的方法".呃呃.咦?

从我所读到的看来,线程并不是真正具体的东西,就像进程一样.它实际上只是一个概念.从我所理解的这种工作方式,处理器为程序(这已被称为一个执行一些命令执行的线程),那么当它需要切换到处理一些其他节目了一下,它存储状态的它正在某个地方执行的程序(线程本地存储),然后开始执行其他程序的指令.而来回.这样,一个线程实际上只是当前正在运行的程序的"执行路径之一"的概念.

与流程不同,流程确实是某种东西 - 它是资源的集合等.

作为一个定义的例子并没有真正帮助我...

来自维基百科:

"计算机科学中的一个线程是执行线程的缩写.线程是程序将(称为"拆分")本身划分为两个或多个同时(或伪同时)运行任务的一种方式.线程和进程不同于一个操作系统到另一个,但通常,一个线程包含在进程内,同一进程中的不同线程共享相同的资源,而同一多任务操作系统中的不同进程则不共享.

我是对的吗?错误?真的是什么线程?

编辑:显然,一个线程也给出了自己的调用堆栈,所以这是有点的具体事情.

multithreading process definition

218
推荐指数
10
解决办法
11万
查看次数

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

如何启动匿名线程类

我有以下代码片段:

public class A {
    public static void main(String[] arg) {
        new Thread() {
            public void run() {
                System.out.println("blah");
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,如何start()在不创建线程类实例的情况下为线程调用方法?

java multithreading anonymous-class

58
推荐指数
3
解决办法
10万
查看次数

如何使用固定数量的工作线程实现简单线程

我正在寻找实现以下内容的最简单,最直接的方法:

  • 主程序实例化工作线程以执行任务.
  • 只能n同时运行任务.
  • n到达,没有更多的工人开始,直到运行的线程数降回到低于n.

java concurrency multithreading

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

为什么Thread实现Runnable?

当线程启动时,JVM会在该线程上调用Java Thread的run()方法.要给线程做一些事情,你可以创建一个Thread的子类并覆盖它的run()方法,或者(首选)你可以为线程的构造函数提供一个Runnable.没关系.

我正在制作一个Thread的子类并重写run,我意识到我无法使该方法受到保护,因为Thread.run()是公共的.然后我意识到了原因:它必须是公共的,因为Thread实现了Runnable.但为什么它实现了Runnable?

这似乎不符合逻辑.一个线程是可启动的(来自当前线程),但是你没有像运行()一个Runnable(来自当前线程)那样运行它; 线程自己运行(在自己的线程上).如果你手动调用Thread的run方法,那么你不是将它用作Thread,只是一个重量级的Runnable.

由于这种设计,任何可以访问Thread对象的代码都可以调用它的公共运行方法,并可能潜入代码,这些代码不是公开的,或者设计为以这种方式调用.它还允许这样的非常奇怪的事情:

Thread.currentThread.run();
Run Code Online (Sandbox Code Playgroud)

Thread实现Runnable是否有合法用途,我没有看到?

java runnable

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

当我在Thread对象上调用run()时,为什么我的Java程序会泄漏内存?

(危险的问题,我希望当我遇到这个问题时答案已经在线)

使用Java 1.4,我有一个方法,我想在某些时候作为一个线程运行,但不是在其他人.所以我将它声明为Thread的子类,然后根据我的需要调用start()或run().

但我发现我的程序会随着时间的推移泄漏内存.我究竟做错了什么?

java multithreading memory-leaks

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

在一个非单例bean上修复Spring代理上的BeanNotOfRequiredTypeException?

我在从应用程序上下文中提取Spring bean时遇到问题.

当我尝试;

InnerThread instance = (InnerThread) SpringContextFactory.getApplicationContext().getBean("innerThread", InnerThread.class);
Run Code Online (Sandbox Code Playgroud)

我明白了

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'innerThread' must be of type [com.generic.InnerThread], but was actually of type [$Proxy26]
Run Code Online (Sandbox Code Playgroud)

如果没有getBean()调用中的指定类,我会得到一个ClassCastException(您可以在下面详细介绍).

InnerThread bean被初始化为非单例,因为我需要多个实例.InnerThread类还扩展了Thread.有趣的是,这个错误出现在OuterThread中,它的设置方式与InnerThread完全相同.

我试图在下面包含所有相关的代码清单/堆栈跟踪.拥有更多Spring经验的人能告诉我这里发生了什么吗?


代码/配置清单

OuterThread.java片段:

public class OuterThread extends Thread {
    private Queue<InnerThread> createInnerThreads() {
        Queue<InnerThread> threads = new ArrayBlockingQueue();

        ApplicationContext ctx = SpringContextFactory.getApplicationContext();
        int i = 0;
        for (SearchRule search : searches) {
            logger.debug("Number of times looped " + i++);
            //Seprated lines to get a better sense of what is going on
            Object …
Run Code Online (Sandbox Code Playgroud)

java aop spring casting proxy-classes

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

为什么"实现Runnable"优先于"extends Thread"?

Java Thread本身实现了Java Runnable!并且根据Internet上的大多数专家,实现Runnable比扩展Thread更受欢迎!即使我们不能在Thread类的线程意义上使用Runnable!
那么为什么我们更喜欢实现Runnable过度扩展,Thread因为在这两种情况下,通过调用一个Thread实现的方法(即start()或者run())来说明实际的线程,尽管在Thread我们没有真正"扩展" Thread仅通过覆盖run()方法的功能的情况下?

如果我听起来很混乱,我道歉......

java multithreading runnable

25
推荐指数
3
解决办法
7万
查看次数