gpt4 book ai didi

java - 如何每 10 秒记录一次我的程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:49:57 25 4
gpt4 key购买 nike

您好,我有一个程序可以从服务器打印无限随机文本在一个 while 循环中并且不会停止,如何每 10 秒在文本文件中记录一次数据?

public class MyServer {
public static String str="";
private volatile boolean running=true;
public synchronized void socketreceive(){
try{
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();//establishes connection
DataInputStream dis=new DataInputStream(s.getInputStream());
str=(String)dis.readUTF();


//this continuously goes on and I need to make a log from it
System.out.println("message= "+str);


ss.close();
}catch(Exception e){}
}

public void receiver(){
final Thread receive=new Thread(new Runnable() {
@Override
public void run() {
while (running){
socketreceive();
}
}

});

最佳答案

对于这种情况,我有一个方便的计时器示例。唯一的缺点是它是一个“Swing ”计时器,在您的情况下它可能是一个沉重的计时器。但是它有效。我添加了一些用于读取和写入的框架函数,这可能会为您提供一些想法。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Timer;

public class TimedLogger {

List<String> strings;

public mySocketReader() {
....
String line = str=(String)dis.readUTF();
storeLine(line);
..
}

synchronized void storeLine(String line) {
strings.add(line);
}
synchronized void writeLines() {
for(String s: strings)
writeInFile(s);
strings.clear();
}

Timer timer = new Timer(10000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
writeLines();
}
});
}

因此,您的读者会将您的行保存在列表中,当出现中断时,作者会将这些行写入文件中。由于函数是同步的,它们不能同时执行,也不能同时执行和同时修改列表。唯一的缺点是当写入正在进行时,您不能在列表中添加任何新行。实际上,在写入完成之前,您无法读取下一行。

您需要有 2 个(或更多列表)并使用同步函数来更改指向它们的指针。

关于java - 如何每 10 秒记录一次我的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com