我知道并不是线程安全的。我试图对TreeMap和做一个比较。下面显示了我使用的代码,我想确定我得到的错误是否是由于TreeMap而不是线程安全,而不是因为其他原因。
线程中的异常“池-1-线程-52”在java.util.TreeMap.rotateLeft(TreeMap.java:2060) at java.util.TreeMap.fixAfterInsertion(TreeMap.java:2127) at java.util.TreeMap.put(TreeMap.java:574)在ThreadTestTreeMap$1.run(ThreadTestTreeMap.java:39
我正在显示通知,并且通知有时间戳。我正在使用以下代码将时间戳转换为日期格式:
public static String getTimeFormat(Long unixSeconds, String pattern) {
//Example EEE MMM dd HH:mm:ss z yyyy;
Date date = new Date(unixSeconds);
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
sdf.setTimeZone(timeZone);
return sdf.forma
我很难找到如何在没有线程异常的情况下删除CopyOnWriteAccess的元素。
Exception in thread "Thread-3649" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
at java.base/java.util.concurrent.CopyOnWriteArrayList.elementAt(CopyOnWriteArrayList.java:386)
at java.base/java.util.concurrent.C
当时我正在玩Java同步机制,面对这样的情况我无法解释。
在下面的代码示例中,我有一个简单的应用程序,它生成一些线程,这些线程等待来自对象的信号,并在收到通知后相互通知:
public class Main {
public static final Object o = new Object();
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 6; ++i) {
new Thread(() ->
以下代码片段:
public void handleInput() {
Scanner sc = new Scanner(System.in);
int x = 3;
while (true) {
FutureTask<String> readNextLine = new FutureTask<String>(sc::nextLine);
ExecutorService executor = Executors.newFixedThreadPool(10);
我对NullPointerException有一个小问题,我无法真正理解它。
我的代码运行24/7,运行良好,但我有一个异常,在应用程序启动后1天到1周之间随机弹出。
下面是堆栈跟踪:
java.lang.NullPointerException
at java.util.LinkedList.get(LinkedList.java:477)
at com.ch4process.acquisition.ScenarioWorker.eventHandling(ScenarioWorker.java:97)
at com.ch4process.acquisition.ScenarioWorker
我正在Main中创建JFrame的新对象,并调用它的函数--调用wait()。我想唤醒这条主线。
public static void main(String[] args) throws Exception {
//some other large code
var loginWin = new LoginWin();
loginWin.setVisible(true);
loginWin.waitForLogin();
System.out.println("Login Finished")
我希望两个线程共享这个变量,但有时在运行时它会打印2次,而不是1和2。
public class man implements Runnable{
int value = 0;
public static void main(String[] args){
Runnable job = new man();
Thread work1 = new Thread(job);
work1.setName("Thread1");
Thread work2 = new Thread(job);
我对Java很陌生,并试图理解Java中的并发性。在探索时,我在相当流行的Java并发上看到了这段代码:
public class CrawledSites {
private List<String> crawledSites = new ArrayList<String>();
private List<String> linkedSites = new ArrayList<String>();
public void add(String site) {
synchronized (this) {
if (
我有一个基于Java EE的应用程序在tomcat上运行,我发现应用程序在运行几个小时后突然挂起。
我在应用程序挂起前收集了线程转储,并将其放入TDA中进行分析:
(线程转储分析器)为上述监视器提供以下消息:
A lot of threads are waiting for this monitor to become available again.
This might indicate a congestion. You also should analyze other locks
blocked by threads waiting for this monitor a
我是一个刚起步的Java开发人员。我想用GUI编写电子邮件客户端,但是当我试图运行WriteMessages线程时,我遇到了一个问题。我正在使用JavaMail库。
public class WriteMessages implements Runnable {
private List<Message> list;
private Properties properties;
private Utilities util = new Utilities();
public WriteMessages(List<Message> li
错误如下所示
Exception in thread "Thread-1" java.lang.NullPointerException
at java.util.LinkedHashMap$Entry.remove(LinkedHashMap.java:332)
at java.util.LinkedHashMap$Entry.recordAccess(LinkedHashMap.java:356)
at java.util.LinkedHashMap.get(LinkedHashMap.java:304)
at Server.getLastF
我不完全理解(Object的) wait和notify是如何工作的,因此我不得不将我的尝试精简到下面的代码部分。
Main.java:
import java.util.ArrayList;
class Main
{
public static Main main = null;
public static int numRunners = 4;
public static ArrayList<Runner> runners = null;
public static void main(String[] args)
{
main = new Ma