- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我使用ExecutorService进行多线程处理,并且由于任务主要是代理检查,因此线程数很高(大约1000个线程)。好吧,当没有添加线程但它们被缓慢杀死时,应用程序开始变慢,线程被杀死的速度越来越慢,直到它停止并挂起少量线程(例如25个线程)为止。
如何解决这些问题而又不实际强行杀死这些线程并完成工作呢?
编辑:
早上好,
我已经记录了我的问题,以便我们所有人都可以理解,即使我误解了。 https://streamable.com/cgoa6
这是该程序的代码:
主班:
package me.inao.proxycheck;
import me.inao.proxycheck.menu.Selection;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args){
byte mode = new Selection().getNumSelect(new String[]{"Proxy check", "Test2", "Test3"});
byte proxyType = 0;
BufferedReader reader = null;
int threads = 1000;
ExecutorService pool = Executors.newFixedThreadPool(threads);
if(mode == 1){
proxyType = new Selection().getNumSelect(new String[]{"HTTP(s)", "SOCKS"});
try{
reader = new BufferedReader(new FileReader("./proxies.txt"));
String line;
boolean breakx = false;
while(true){
for(int i = 0; i < (threads+1); i++){
line = reader.readLine();
byte finalProxyType = proxyType;
String finalLine = line;
if(finalLine != null){
pool.execute(() -> {
new Thread().checkProxy(finalLine, finalProxyType);
});
}else{
breakx = true;
break;
}
}
if(breakx){
break;
}
}
}catch (Exception e){
System.out.println("File 'proxies.txt.txt' not found..");
}
}
pool.shutdown();
}
}
package me.inao.proxycheck;
import me.inao.proxycheck.proxy.ProxyCheck;
import java.io.File;
import java.io.FileWriter;
import java.net.Proxy;
public class Thread extends java.lang.Thread {
public void checkProxy(String line, byte type){
Proxy proxy = new ProxyCheck().createProxy(line.split(":")[0], line.split(":")[1], type);
if(new ProxyCheck().isValid(proxy)){
System.out.println("Found valid: " + proxy.type() + " | " + proxy.address().toString());
if(!(new File("./proxies/").exists())){
new File("./proxies").mkdir();
}
File f;
if(type == 1) f = new File("./proxies/workingHTTP.txt");
else if(type == 2) f = new File("./proxies/workingSOCKS.txt");
else f = new File("./proxies/workingOTHERS.txt");
if(f.exists()){
try{
FileWriter wr = new FileWriter(f, true);
wr.write(line + "\n");
wr.flush();
wr.close();
}catch (Exception e){
e.printStackTrace();
}
}else{
try{
FileWriter wr = new FileWriter(f);
wr.write(line + "\n");
wr.flush();
wr.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}
package me.inao.proxycheck.proxy;
import java.net.*;
public class ProxyCheck {
public Proxy createProxy(String addr, String port, byte type){
if(addr == null || port == null){
System.out.println("Provided invalid proxy (null)");
return null;
}
SocketAddress address = new InetSocketAddress(addr, Integer.parseInt(port));
if(type == 1){
return new Proxy(Proxy.Type.HTTP, address);
}
else if(type == 2){
return new Proxy(Proxy.Type.SOCKS, address);
}
else return null;
}
public boolean isValid(Proxy proxy){
try{
if(proxy != null){
URL url = new URL("http://azenv.net/");
HttpURLConnection conn = (HttpURLConnection)url.openConnection(proxy);
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.connect();
if(conn.getResponseCode() == 200){
return true;
}else{
return false;
}
}
}catch (Exception e){
return false;
}
return false;
}
}
最佳答案
想要使用ExecutorService service = Executors.newCachedThreadPool()
时,听起来好像正在使用ExecutorService service = Executors.newFixedThreadPool(n)
,其中n
是要一直保持打开状态的线程数。这给初始化带来了沉重的处理负担,但是,只要您在整个程序中保持它运行,它就可以极大地帮助您解决问题。
关于java - ExecutorService线程很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59996350/
我有一个executorService,它不等待executorService部分完成,它直接返回返回值而不等待下面是我的代码:请查看我是否正确实现了executorService,并在需要时帮助我纠
我有一个运行在另一个执行器服务中的执行器服务来发送电子邮件。如果我在外部执行程序上调用关闭,它正在等待内部执行程序服务关闭,这会极大地影响响应时间。 private final ExecutorSer
我有两个 ExecutorService 实例:一个有 4 个线程,另一个有 20 个线程。我希望单击按钮后,服务 1 就会停止并等待服务 2 结束。之后,服务1继续运行。 我尝试使用 wait 和
我目前有一个 ExecutorService,我想要以下内容: 不应接受任何新任务。 当前任务仍应继续执行。 应返回所有当前排队的任务。 我面临的问题是 shutdown() 不会返回任何未执行的已提
/** * Blocks until all tasks have completed execution after a shutdown * request, or the timeout o
我在线程 A 上创建 ExecutorService,然后线程 B 在 ExecutorService 上调用 shutdown() 和 awaitTermination()。 假设在线程B创建之前所
为了提高请求的响应时间,我打算使用 executorService 并将工作分配给多个线程,以减少请求的响应时间。 但是在阅读文章和博客后,为每个请求创建新的线程池也会影响性能。 闲置方法是什么,-1
我正在学习使用 ExectorService 来汇集 threads 并发送任务。我下面有一个简单的程序 import java.util.concurrent.ExecutorService; im
这是我为暴露我的问题所做的一个简化示例。我有任务doSomeWork()我使用 ExecutorService(一次最多 4 个线程)以多线程方式处理。但是,如果任何线程/任务产生异常,我想: 停止处
我的类路径中有 Guava ,想使用 ListenableFuture s,但目前我不知道如何提交ListenableFuture s 还是目前只能在调用线程中没有执行程序的情况下使用它们?我读过 r
我正在学习 ExecutorService 和 Callables,但收到来自 intelij 的警告,说我正在为此行进行未经检查的分配: Future> future = executorServi
我正在编写一个 Java Fractal Explorer,分形计算是多线程完成的。以前,我只是创建了一堆线程(与系统有处理器内核一样多)并将它们保存在一个数组中,但这会导致一些问题并且不是很优雅,现
我想加入两个在 ExecutorService 中执行的线程。 public class CURD { public static ExecutorService executorService
我有一个工作单元列表,我想并行处理它们。每个单元工作 8-15 秒,完全计算时间,没有 I/O 阻塞。我想要实现的是拥有一个 ExecutorService那: 当没有工作要做时,实例化的线程为零 如
我想同时向最多 10 个用户发送 ping,并在 ping 完成后用结果更新用户对象。 为了做到这一点,我尝试使用 ExecutorService . 我从这样的代码开始: private void
我有一个在 ForkJoinPool 线程池中执行的递归批量任务。 public class SomeTask extends RecursiveAction { @Override
我有一个要遍历的列表,并且对于列表中的每个值都将调用一个方法。现在我已经将相关方法放在一个线程中,并使用执行器服务来并行处理这些方法。但是,对于列表中的每个值,该方法最终会由于某种原因被调用两次。 E
这个问题已经有答案了: How to wait for all threads to finish, using ExecutorService? (27 个回答) 已关闭 4 年前。 我正在尝试使用
我有一个基于ExecutorService线程流量调节的问题:我想 .submit() 多个线程来执行,我希望一些线程等待,直到特定的先前线程完成执行。 。 到目前为止,我知道一种通过使用 Count
我想知道这段代码是否正确。当我在构造对象本身时将可运行对象提交给执行器服务时,这不会导致问题吗? public class A implements Runnable { public
我是一名优秀的程序员,十分优秀!