草庐IT

Tread多线程

全部标签

java - 多线程运行速度比单进程慢

在学校的一项作业中,我被要求创建一个简单的程序来创建1000个文本文件,每个文件的行数是随机的,通过多线程\单进程计算有多少行。而不是删除这些文件。现在在测试过程中发生了一件奇怪的事情——对所有文件进行线性计数总是比以多线程方式对它们进行计数要快一点,这在我的类里面引发了相当多的学术理论讨论。当使用Scanner读取所有文件时,一切都按预期工作-以大约500毫秒的线性时间和400毫秒的线程时间读取1000个文件然而,当我使用BufferedReader时,线性时间下降到大约110毫秒,线程时间下降到130毫秒。代码的哪一部分导致了这个瓶颈,为什么?编辑:澄清一下,我不是在问为什么Sca

阿里一面:Java中如何停止线程?

引言在Java多线程编程中,正确且安全地停止线程是一项关键技能。简单粗暴地“杀死”线程不仅可能导致数据不一致性,还可能引发各种难以预测的错误。本文将探讨几种在Java中优雅地停止线程的方法,以确保程序的健壮性和可靠性。使用标志位(共享变量)停止线程一种常见的做法是使用一个boolean类型的标志位来控制线程的执行。线程在执行任务的过程中不断检查标志位的状态,当标志位被设置为true时,线程停止执行任务,从而退出线程。classStoppableThreadextendsThread{privatevolatilebooleanisStopped=true;@Overridepublicvoid

多线程系列(十九) -Future使用详解

一、摘要在前几篇线程系列文章中,我们介绍了线程池的相关技术,任务执行类只需要实现Runnable接口,然后交给线程池,就可以轻松的实现异步执行多个任务的目标,提升程序的执行效率,比如如下异步执行任务下载。//创建一个线程池ExecutorServiceexecutor=Executors.newFixedThreadPool(2);//提交任务executor.submit(newRunnable(){@Overridepublicvoidrun(){//执行下载某文件任务System.out.println("执行下载某文件任务");}});而实际上Runnable接口并不能满足所有的需求,

Java缓存线程池和线程本地

我有一个关于java和并发的问题。假设我有一个名为“a”的ThreadLocal变量。我使用CachedThreadPool来获取新线程。当线程被重用时,ThreadLocal变量'a'会发生什么变化?它保持相同的值(因为它是同一个线程)还是它开始为空(就像线程是新的一样)? 最佳答案 默认情况下,ThreadLocals与线程一起重用。如果您需要重新初始化它们,您可以通过覆盖下面提到的方法来实现:fromjavadocforjava.util.concurrent.ThreadPoolExecutorHookmethodsThis

java - 没有 final 修饰符,Initialization On Demand Holder 成语线程安全吗

我有一种预感,即使用holder惯用法而不将holder字段声明为final不是线程安全的(由于不变性在Java中的工作方式)。有人可以证实这一点(希望有一些消息来源)吗?publicclassSomething{privatelonganswer=1;privateSomething(){answer+=10;answer+=10;}publicintgetAnswer(){returnanswer;}privatestaticclassLazyHolder{//noticenofinalprivatestaticSomethingINSTANCE=newSomething();}p

java - 运行 while 语句后结束 Java 线程

我的程序完成后,我在结束线程时遇到问题。我运行一个线程时钟对象,它工作得很好,但我需要在时间“==”一小时似乎工作时结束所有线程我只需要知道如何结束它们。这是我拥有的代码示例,除了在该代码上方定义的一个int之外,这是唯一在run方法中运行的代码。@Overridepublicvoidrun(){intmins=5;while(clock.getHour()!=1){EnterCarPark();if(clock.getMin()>=mins){System.out.println("Time:"+clock.getTime()+""+entryPoint.getRoadName()+

java - spring TransactionTemplate 和 SimpleJdbcTemplate 是线程安全的吗?

我目前正在处理的代码中有一个被许多线程使用的单例,除了TransactionTemplate和SimpleJdbcTemplate的两个字段外没有任何状态,这两个字段在单例函数中用于访问数据库。这安全吗?还是我应该在需要时创建一个新模板? 最佳答案 SimpleJdbcTemplate只是包装了一个JdbcTemplate,所以it'sthread-safe,原样theTransactionTemplate. 关于java-springTransactionTemplate和Simple

java - 使用多线程读取单个文件 : should speed up?

我正在读取一个包含500000行的文件。我正在测试多线程如何加速进程....privatevoidmultiThreadRead(intnum){for(inti=1;i"+e.getMessage());e.printStackTrace();}}};}privatevoidsequentialRead(intnum){try{longstartTime=System.currentTimeMillis();System.out.println("Starttime:"+startTime);for(inti=0;i对于num=1我得到以下结果:开始时间:1326224619049完

java - 多线程 Socket 通讯 Client/Server

我完成了一个运行良好的客户端/服务器套接字通信程序。现在我想弄清楚如何做到这一点,以便我可以同时拥有到服务器的多个客户端连接。我环顾四周,似乎有不止几种不同的方法可以做到这一点。所以我来这里是想向你们寻求帮助/建议。我的服务器:publicclassServer{privateServerSocketserverSocket=null;privateSocketclientSocket=null;publicServer(){try{serverSocket=newServerSocket(7003);}catch(IOExceptione){System.err.println("C

java - vert.x 如何是单线程的?

根据我的理解,每个vert.x实例都将被分配一个事件循环。事件循环处理该特定实例的所有请求和其他任务。我认为事件循环是一个线程。当部署了多个vert.x实例时,每个实例都有自己的事件循环,对吧?这意味着存在多个线程(multi-threading)。我是这样理解的。这个单线程的概念让我很头疼。任何帮助将不胜感激。 最佳答案 Vert.x不像node.js那样是单线程的。在vert.x中,你必须区分Verticles和WorkerVerticles。一个Vert.x实例将创建多个事件循环(它们是线程),通常每个CPU核心一个。Vert