问题标签 [java-threads]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 java 中使用线程进行任务调度(已编辑)
我目前正在开发一个数据库集成的每日文件传输调度表单应用程序,以供运营业务使用。为了能够控制和访问特定的计划,我决定为每个计划创建一个线程,以便可以停止特定的计划,或者按需重新启动。为此,我编写了一个单独的类,其中包括一个自定义线程类及其构造函数、一个用于创建和运行线程实例的主类以及另一个包含日常调度的可运行方法的类。为了能够访问特定线程,我尝试实现一个 ConcurrentHashMap 来同步哈希码和创建的线程的名称,以及一个 ThreadGroup。当我创建一个线程时,我可以将线程的名称和哈希码传递给 ConcurrentHashMap,与线程组一起。但是,当我创建第二个或第三个线程时,我发现指定的线程的指定名称和哈希码正在发生变化。我上面解释的课程可以在下面看到。
我已经激活了两个不同的计划,每个计划都由一个线程运行。可以看到活动线程的输出
从上面的输出中可以看出,名为 Test 2 的线程的名称和 hashCode 与放入 threadMap(hashMap) 的值不对应。我希望能够为特定操作提供静态名称和哈希码,以便我可以通过专门访问每个操作来停止、暂停、恢复或删除。因此,我想知道可能导致问题的原因,或者我以错误的方式实施了什么。
java - Java Callable : 比单线程进程花费的时间
我有以下示例代码。
输出分布为
至
可以注意到第二行几乎是不变的,而线程版本变化很大。为什么会出现这种情况?可以做些什么来减少变异性?请让我知道我是否在做一些愚蠢的事情,因为我是 Java 多线程的新手。
java - 从运行线程中的公共类调用方法
到目前为止,我根据模型-视图-控制器模式拆分了我的程序。对于我的线程,我创建了一个新类:
在 run() 方法中,线程应该调用另一个类的方法(例如,我的目的是公共类 Controller)。
我可以实例化类控制器,但这不会破坏遵守 MVC 原则的目的吗?
我该怎么做?
java - 使用线程在固定时间间隔上调用函数
我想在特定的时间间隔调用我的函数。现在我的时间间隔设置为 1 分钟。我有以下代码示例:
定时器.java
新JFrame.java
当我启动线程时,我将得到以下输出:
一旦时间间隔完成,我会得到以下输出:
之后我在 00:00:30 秒停止了我的线程,所以我将得到以下输出:
我在 00:00:30 秒停止了我的线程,但我的函数在 00:00:30 秒后自动调用
任何人都可以帮助我,我如何使用线程在固定时间间隔内调用任何函数就像当我单击开始按钮时,我的线程将启动并调用函数,然后等待 2 分钟。2分钟后再次调用我的函数并重复循环。如果我单击停止按钮,则线程将停止,直到我使用开始按钮启动线程。
java - 如何使用线程中断方法停止线程
我正在尝试学习线程中断以及如何使线程终止而不调用停止。
输出
我无法理解为什么第二次打印 Sleeping 并且第二次而不是第一次抛出中断的异常。我已经检查了使用 volatile 关键字来停止 java 中的线程的帖子。但我无法理解如何使用它在这种情况下,线程因中断而停止。
java - 如何同步共享变量以使该程序安全?
我刚刚阅读了 Java Concurrency in Practice 一书,它显示了一个不安全的程序:
书中写道:
同步还有另一个重要且微妙的方面:内存可见性。我们不仅要防止一个线程在另一个正在使用对象时修改它的状态,还要确保当一个线程修改一个对象的状态时,其他线程可以实际看到所做的更改。但如果没有同步,这可能不会发生。
所以我明白即使没有并发写入,线程之间共享的数据,比如一个线程写入另一个线程读取,也需要同步,以便由写入线程发布到读取线程。写入线程可以启动另一个线程,该线程将在启动读取线程后循环读取写入线程写入的数据。数据可以共享,也可以不共享。如果数据是多个变量,则可能会共享一些变量而不会共享其他变量,并且共享顺序可能会有所不同。线程之间共享的所有数据都应该同步。如果下面的程序没有使用同步块,那么读取线程可能看不到ready true,或者它可能在看到它的数字集后才看到它。未同步的数据对于线程来说会变得陈旧。为避免数据过时,它必须在写访问期间和读访问期间同步。仅同步写入访问不会防止数据过时。
我想知道如何使用 synchronize 语句来使这个示例程序安全。
java - 如何中断从方法中创建的线程?
我知道您可以中断从可运行类创建的线程,但是如何中断从方法创建的线程?使用 volatile 布尔值对我不起作用,所以我认为要么有更好的方法来做到这一点,要么我需要以某种方式中断它。我不想中断所有线程,只是这个。
我创建了一个启动线程的方法,如下所示:
……
android - 应用和服务中的 Android 线程
我有一个具有长期运行服务的 Android 应用程序。
线程(Android 在其中调用服务的方法)是否与 Android 用于调用应用程序方法(用于活动等)的线程相同?
如果是这样,在某处可以保证吗?
java - 如何使用“实现可运行”在特定套接字线程中调用方法?
我有一个工作 Java 服务器(虽然边缘有点粗糙),其中包含 3 个主要类。
第一个类运行服务器并获取套接字以侦听端口并将新连接传递给客户端处理程序。
第二类是线程客户端处理程序
第三个是从客户端处理程序调用并处理信息的协议类。处理完信息后,协议类将经过处理或格式化的响应返回给客户端处理程序以传递给客户端。
优点是第二个类只需要加载可接受的数据即可从套接字接受。数据可以传递给协议处理程序,并且协议处理程序可以加载您希望服务器用来与客户端对话的任何协议。
在这个例子中,我加载了一个基于 telnet 的聊天类。
例如,如果有人离开聊天,客户端处理程序类可能会执行以下代码:
这将传递"** [username] has left the room **"
给serverprotocol
类,然后以最佳方式返回数据以将消息传输给客户端。在这种情况下,serverprotocol
该类使用 telnet 控制代码格式化消息,告诉客户端重新绘制屏幕,添加新消息并向上滚动缓冲区中现有的当前消息。
例如,我可能只希望客户端处理程序类将消息发送到用户在某些聊天室中的套接字,因此我不想总是发送到所有套接字。
在我的代码中,这是 Class 1 - 接受套接字的服务器类:
Class 2 是一个扩展线程的类:
我一直在拼命地尝试查看是否可以使用它来implements Runnable
代替它,但是我没有运气根据线程的实例号调用线程的processInput
(或者应该读取的)方法(在此处的代码中简单地调用) .dataToBeProcessed
i
我见过的最接近的:
它可以利用将服务器作为线程池服务器运行。
但是,sendToAll
在这种情况下,该函数通过 a 直接写入PrintWriter
与套接字关联的 s HashMap
。服务器不允许您发送到单独的协议处理程序类,甚至是单独的ChatServerWorker
类实例。这意味着我不能,例如,仅向套接字 1 和 3 发送消息,然后向套接字 2 发送单独的消息。
我在网上找不到一个可以在不使用extends Thread
.
具体来说,我想保留使用以下行的能力:
或者
其中整数可用于引用线程实例,或该线程使用的任何类变量或方法。
我错过了什么吗?
java - 如何使无限线程实例循环?
我想创建线程来操作它们(运行、等待、停止)。我知道怎么做一个一个实例
实现可运行的类
我创建对象的类
我想要一个只有在用户想要时才结束的循环(可能带有一个布尔标志)。如何创建每 10 秒动态实例化 Thread 的循环?