我的程序如下:
import java.io.*;
class MyThread implements Runnable{
int st,en;
LineNumberReader lmr1;
BufferedWriter bw;
MyThread(int s,int e){
st=s;
en=e;
}
public void run(){
try{
bw=new BufferedWriter(new FileWriter("EmpWritten.txt"));
lmr1=new LineNumberReader(new FileReader("out3.txt"));
String s=Thread.currentThread().getName();
lmr1.skip(st);
while(st++<en){
bw.write(s+"\t"+lmr1.readLine());
bw.newLine();
}
lmr1.close();
bw.close();
}
catch(Exception e){}
}
public static void main(String args[])throws Exception{
LineNumberReader lmr=new LineNumberReader(new FileReader("out3.txt"));
lmr.skip(Long.MAX_VALUE);
int num=lmr.getLineNumber();
int num1=num/3,num2=2*num1;
MyThread mt1=new MyThread(0,num1);
MyThread mt2=new MyThread(num1+1,num2);
MyThread mt3=new MyThread(num2+1,num);
Thread t1=new Thread(mt1);
Thread t2=new Thread(mt2);
Thread t3=new Thread(mt3);
t1.start();
t2.start();
t3.start();
lmr.close();
}
}
输入:
提交ID名称薪资部门编号
提交ID1名称1 25100部门1
提交ID2名称2 25200部门2
提交ID3名称3 25300部门3
提交ID4名称4 25400部门4
提交ID5名称5 25500部门5
提交ID6名称6 25600部门6
提交ID7名称7 25700部门7
提交ID8名称8 25800部门8
提交ID9名称9 25900部门9
提交ID10名称10 26000部门10
输出:
Thread-2 ID Name工资部门编号Thread-2 Commit ID1 Name1 25100 Dept1
Thread-2 Commit ID2 Name2 25200 Dept2
Thread-2 Commit ID3 Name3 25300 Dept3
为什么其他线程不执行?需要做哪些修改才能获得所需的输出?该计划的有效实施也受欢迎。
三条线起作用了。在run方法中添加一些日志后可以看到它。我不确定你到底想要什么。但我认为你们需要生产者-消费者的设计模式。
我有两个输入文件,分别是File1和File2。File1包含部分记录,其余部分记录分散到File2,为了创建一条记录,我需要同时读取File1和File2。每条记录的唯一键将位于记录之前的File1和File2中。请您帮助我们如何使用Spring batch reader实现此功能。
我是Spring框架的新手,我正在使用Spring做一个简单的项目,但介于两者之间。在我的项目中,我使用Spring Poller从目录中读取文件。然后通过各种通道处理该文件并将其发送到队列。但问题是“file-inbing-channel-适配器”(我正在使用)一次只读取一个文件。所以我需要一个一次读取和处理多个文件的解决方案。有没有办法在Spring集成中实现多线程。谢谢你。
问题内容: 我了解对于普通的主轴驱动器系统,使用多个线程读取文件效率很低。 这是另一种情况,我有一个高吞吐量的文件系统可供使用,它具有196个CPU内核和2TB RAM的读取速度高达3GB / s。 单线程Java程序以最大85-100 MB /s的速度读取文件,因此我有可能变得比单线程更好。我必须读取最大1TB的文件,并且有足够的RAM来加载它。 当前,我使用以下内容或类似内容,但需要使用多线程
问题内容: 阅读部分不是并发的,但处理是并发的。我用这种方式来命名标题,因为我最有可能使用该短语再次搜索此问题。:) 尝试 超越示例 之后,我陷入僵局,因此这对我来说是一种学习经验。我的目标是: 逐行读取文件(最终使用缓冲区执行多行)。 将文本传递给执行某些正则表达式的工作。 将结果发送到某个地方,但要避免使用互斥或共享变量。我正在将整数(总是数字1)发送到通道。这有点愚蠢,但是如果不引起问题
问题内容: 程应在同一瞬间开始。我了解,如果你这样做,则下次执行之前需要花费几毫秒的时间。 可能还是不可能?线程应该在同一瞬间开始。我知道,如果你执行,则下次执行thread2.start()需要几毫秒。 这是可能的还是不可能的? 问题答案: 要完全同时(至少尽可能好)启动线程,可以使用CyclicBarrier: 这不必是,你也可以使用 这仍然无法确保它们已正确启动 在其他平台上,确切地说启动线
首先,我在编码方面是个新手,所以我为我可能犯的任何隐语错误道歉 我正在使用Java(openJDK11)和Spring boot开发后端服务器: 该应用程序由许多面板和子面板组成,这些面板和子面板从web浏览器打开。单击子面板时,在前端执行三个不同的GET请求。 这三个请求需要不同的响应(json模式、json数据等)。每个请求启动一个访问相同配置文件的不同线程(每个子面板有一个配置文件),该配置