Tag: multithreading

Guava:Cacheloader.load()如何工作

假设我有两个线程,即线程A和线程B,以及一个空的并且有10分钟到期的LoadingCache 。 CacheLoader用于构建LoadingCache以及它从数据库中检索的所有内容。 假设LoadingCache仍为空,并且线程A和线程B同时调用了LoadingCache.get(key) 。 CacheLoader.load()方法会被调用两次吗? 从我在文档中看到的内容: 如果get(K)或getUnchecked(K)的另一个调用当前正在加载key的值,则只需等待该线程完成并返回其加载的值 。 请注意,多个线程可以同时加载不同键的值。 为了validation我的理解,如果线程A和线程B之间有5ms的差异,那么线程A将自动锁定CacheLoader.load()方法,加载值,然后线程B只是获取加载的值。 这样,不需要同步。 这是正确的吗?

两个线程执行两个`synchronized`方法?

我正在阅读有关JAVA同步的内容。 我class上有两种方法。 public synchronized void eat() { System.out.println(“eat”); eatDinner(); } public synchronized void eatDinner() { System.out.println(“eat”); } 我的两个方法都是同步的。 现在2个线程可以调用eat()而另一个eatDinner()可以同时运行吗? 如果thread2还没有执行eatDinner() 。 thread1可以从eat()调用eatDinner() eat()吗?

将线程实现到Java Web Crawler中

这是我写的原始网络爬虫:(仅供参考) https://github.com/domshahbazi/java-webcrawler/tree/master 这是一个简单的网络爬虫,它访问给定的初始网页,从页面中删除所有链接并将它们添加到队列(LinkedList),然后逐个弹出它们,每次访问,循环再次开始。 为了加速我的程序和学习,我尝试使用线程实现,这样我就可以同时运行多个线程,在更短的时间内索引更多的页面。 以下是每个class级: 主要课程 public class controller { public static void main(String args[]) throws InterruptedException { DataStruc data = new DataStruc(“http://www.imdb.com/title/tt1045772/?ref_=nm_flmg_act_12”); Thread crawl1 = new Crawler(data); Thread crawl2 = new Crawler(data); crawl1.start(); crawl2.start(); } } 爬虫类 (线程) public class Crawler extends Thread { /** Instance of Data Structure **/ DataStruc data; /** Number […]

Java:在线程化时更改标签值

我想创建一个小循环,在我按下GUI上的按钮后,值将每秒更改; 我试过使用一个线程,但我似乎无法让它正常工作。 现在发生的是程序在按下按钮后暂停10秒钟。 你可以帮帮我吗? 这就是我的代码 private void ButtonActionPerformed(java.awt.event.ActionEvent evt) { for (x = 0; x <= 10; x++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); here. } nummerlabel.setText(String.valueOf(x)); } }

multithreadingJava的Hello World

我想要了解如何使用关键字:wait,notify / All,synchronized,所以我决定尝试一个简单的例子。 基本上我要做的是创建两个打印字符串的线程。 第一个线程的字符串为“Hello”,而第二个线程的字符串为“World”。 我想要达到的输出如下:Hello World Hello World Hello World … 这是我到目前为止编写的代码,但现在的输出是:Hello Hello Hello … World World World … 错误在哪里/哪个? 谢谢。 🙂 这是代码: class MyThread implements Runnable { private SimpleSyncThread sync; private String s; public MyThread(SimpleSyncThread sync, String s) { this.sync = sync; this.s = s; } public static void pause(long time) { try […]

在httpclient.execute中的HttpClientConnectionOperator.connect时忽略套接字读取超时

下面是jstack的输出,看线程,nid = 0x771d(30493)。 几个小时前就开始了。 “taskScheduler-6” prio=10 tid=0x00007f4479e07800 nid=0x771d runnable [0x00007f446e63a000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketInputStream.read(SocketInputStream.java:122) at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:554) at sun.security.ssl.InputRecord.read(InputRecord.java:509) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934) – locked (a java.lang.Object) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) – locked (a java.lang.Object) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory .java:275) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java: 254) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:1 23) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionMa nager.java:318) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) […]

如何在Java中停止Thread

我一直在学习线程,是的…我是一个noobie。 我有一个问题,我不知道如何停止线程,因为方法.spot()已被弃用。 我想知道如何安全地停止一个线程。 我这样做了: public class Principal{ private boolean bo1; private Thread tr1; public Principal(){ bo1 = true; tr1 = new Thread(){ public void run(){ while(bo1){ //What the Thread does goes here, its a chronometer. } } }; // The thread body stops here. } // The constructor body stops here. public void changeBo1(){ if(bo1 […]

setPriority()方法无法正常工作

我从这里做示例代码。 我得到了结果: Thread[Thread-3,1,main]: 5 Thread[Thread-0,10,main]: 5 Thread[Thread-2,1,main]: 5 Thread[Thread-1,1,main]: 5 Thread[Thread-4,1,main]: 5 Thread[Thread-0,10,main]: 4 Thread[Thread-3,1,main]: 4 Thread[Thread-2,1,main]: 4 Thread[Thread-0,10,main]: 3 Thread[Thread-5,1,main]: 5 Thread[Thread-3,1,main]: 3 Thread[Thread-2,1,main]: 3 Thread[Thread-1,1,main]: 4 Thread[Thread-5,1,main]: 4 Thread[Thread-3,1,main]: 2 Thread[Thread-2,1,main]: 2 Thread[Thread-5,1,main]: 3 Thread[Thread-3,1,main]: 1 Thread[Thread-4,1,main]: 4 Thread[Thread-0,10,main]: 2 Thread[Thread-2,1,main]: 1 Thread[Thread-5,1,main]: 2 Thread[Thread-4,1,main]: 3 Thread[Thread-5,1,main]: 1 Thread[Thread-1,1,main]: 3 Thread[Thread-0,10,main]: 1 Thread[Thread-4,1,main]: […]

从多个线程读取相同的ResultSet

在数据库中,我有一个定义表,在启动时从应用程序中读取一次。 这个定义表很少改变,所以读取它一次并在每次更改时重新启动它都是有意义的。 但是,在读取表(放入ResultSet)之后,将由在其自己的线程中运行的多个处理程序读取它。 您如何建议完成此任务? 我的想法是填充CachedRowSet,然后在每次新请求到来时为每个处理程序创建此集合的副本(通过createCopy()方法)。 你认为这是明智的吗? 这提供了良好的表现吗? 谢谢。

如何正确停止ServerSocket线程? 关闭套接字失败

我知道之前已经讨论过这个问题了,但我找不到合适的解决方案来解决我的问题。 我想在后台运行一个ServerSocket线程,监听指定的端口。 它实际上工作,但只有一次。 似乎服务器正在侦听的端口从未正确关闭,并且在我尝试重新启动时仍然处于活动状态(O不重新启动线程本身)。 有人能说出为什么它不能正常工作吗? 在此先感谢您的帮助……! 编辑: 我在客户端遇到同样的问题。 我有一个发送者线程,也不能停止。 最好的方法是什么? ClientConnector只是一个连接到服务器端口并发送数据的类。 这不是一个线程或类似的东西。 这是我的发件人类: private class InternalCamSender extends Thread { private int sendInterval = 500; // default 500 ms private ClientConnector clientConn = null; public InternalCamSender() { this.sendInterval = getSendingInterval(); this.clientConn = new ClientConnector(); } @Override public void run() { while(!Thread.currentThread().isInterrupted()) { clientConn.sendCamPdu(CodingScheme.BER, createNewPDU()); try { […]