草庐IT

java - 当一个线程完成后,如何通知主线程?

我使用FTP原始命令将文件上传到FTP服务器,我在代码中启动了一个新线程通过套接字发送文件。当新启动的线程完成发送文件时,我想向控制台输出一些消息,如何确保线程已完成工作?这是我的代码:TinyFTPClientftp=newTinyFTPClient(host,port,user,pswd);ftp.execute("TYPEA");StringpasvReturn=ftp.execute("PASV");StringpasvHost=TinyFTPClient.parseAddress(pasvReturn);intpasvPort=TinyFTPClient.parsePort(

java - 当调用 thread.join() 时,谁以及何时通知 thread.wait()?

thread.join()将调用thread.wait(),但是谁以及何时通知(使用thread.notify()或notifyAll())thread.wait()?我们知道threadjoin会等待线程完成,但是谁调用notify呢? 最佳答案 关于jdk7forlinux,你可以从openjdk的源码中得到答案。/jdk7/hotspot/src/os/linux/vm/os_linux.cppintret=pthread_create(&tid,&attr,(void*(*)(void*))java_start,thread

java - 如何编写简单的公平信号量?

我发现信号量(我的CustomSemaphore)的简单实现,据我所知,这是“不公平”的,因为进入安全block始终只能进入第一个线程(我不确定)。我如何编写公平的信号量(并发性的模拟newSemaphore(1,true);)publicclassSimpleSemaphoreSample2{CustomSemaphorecSem=newCustomSemaphore(1);publicstaticvoidmain(String[]args){SimpleSemaphoreSample2main=newSimpleSemaphoreSample2();Semaphoresem=new

java - Thread.sleep 情况下的异常处理和 Threads 情况下的 wait() 方法

我正在尝试编写一个生产者消费者模型(java中的生产者线程和消费者线程)我想知道如何处理Thread.sleep方法和Object类的wait()抛出的InterruptedException方法packageproducerconsumer;importjava.util.ArrayList;publicclassConsumerimplementsRunnable{ArrayListcontainer;@Overridepublicvoidrun(){while(true){System.out.println("ConsumerThreadRunning");try{Thread

java - IntelliJ 调试 : Suspend whole VM then step on single thread

我正在调试一个有很多线程的应用程序。我的断点设置为暂停整个VM。当线程遇到其中一个断点时,我想使用StepOver。但这似乎会恢复整个虚拟机,直到该步骤完成。如果我可以只步进遇到断点的单个线程,那将非常有帮助。在IntelliJ11.1/Java6中有什么方法可以做到这一点吗?(希望我没有遗漏一些明显的东西......) 最佳答案 此功能已在IntelliJ16中添加(他的回答中引用的CrazyCoder问题已解决)更多细节在这里:https://blog.jetbrains.com/idea/2016/02/intellij-id

java - Thread.holdsLock(lock) 的目的是什么?

我看到有人用断言!Thread.holdsLock(lock)以避免死锁。这样做的目的是什么?如果锁对象被另一个线程持有,assert会导致代码立即退出吗? 最佳答案 javadocofthemethod说:Returnstrueifandonlyifthecurrentthreadholdsthemonitorlockonthespecifiedobject.(强调我的)因此,断言检查当前线程是否持有给定锁对象的监视器锁。请注意,断言用于检查不变量,可以禁用。它们不应用于防止死锁。应该使用常规的if测试来做到这一点。

java - Thread 类的 join() 方法是如何工作的?

考虑以下代码:classThreadJoinTest{publicstaticvoidmain(String[]arguments){TimeUnitunit;finalThreadtaskThread=newThread(task);taskThread.start();taskThread.join(unit.millis(timeout));}}因此,当主线程执行带有超时值的taskThread.join()行时,主线程会为taskThread提供充足的时间来完成其任务?这是join方法的主要目标吗?如果发生什么情况:taskThread在超时期限之前完成它的执行?如果达到超时但

java - 在 Java 中使用 10 个线程打印 1 到 100

我是多线程的新手,我遇到了一个问题,要在Java中使用10个线程打印1到100,并具有以下约束。线程t1应该打印:1,11,21,31,...91t2应该打印:2,12,22,32,...92同样t10应该打印:10,20,30,...100最终输出应该是123..100我试过了,但它在所有10个线程中都抛出了以下异常:java.lang.IllegalMonitorStateExceptionatjava.lang.Object.wait(NativeMethod)atjava.lang.Object.wait(Object.java:485)atthread.run(MyThrea

生产者消费者的Java实现抛出java.lang.IllegalMonitorStateException

importjava.util.LinkedList;importjava.util.Queue;classProducerextendsPubSubimplementsRunnable{@Overridepublicvoidrun(){synchronized(queue){if(queue.size()==99){try{wait();}catch(InterruptedExceptione){e.printStackTrace();}}queue.add(2);try{Thread.sleep(1000);}catch(InterruptedExceptione){e.print

Java 多线程 : Unexpected result

我正在开发企业应用程序。在多线程环境中运行应用程序时,我遇到了一些问题。我正在编写一个程序,其中有一个变量的值正在以非常快的速度(例如每秒10000次更新)更新(递增)。循环运行一定的迭代,变量的值递增并存储在HashMap中。一旦循环终止并打印HashMap中的变量值。我得到了意外的变量值。这是演示程序(请阅读评论以便更好地理解):classtestimplementsRunnable{staticConcurrentHashMapmap=newConcurrentHashMap();staticAtomicIntegervalue_to_be_incremented_stored=