, . . , :
Java ScheduledThreadPoolExecutor, Java 5 JDK/JRE.
( , , Oracle JavaDoc)
ScheduledThreadPoolExecutor schedThPoolExec = new ScheduledThreadPoolExecutor(1);
public void send(byte[] data, String destinationHost, int destinationPort, double interPacketDelayMs) {
long interDelayNanos = (long) ( interPacketDelayMs * 1000000.0 );
schedThPoolExec.scheduleAtFixedRate( new SendPacketsTimerTask(data, destinationHost, destinationPort), 0, interDelayNanos , TimeUnit.NANOSECONDS);
}
class SendPacketsTimerTask implements Runnable {
int offset = 0;
byte[] buffer;
String host;
int port;
public SendPacketsTimerTask(byte[] buffer, String destinationHost, int destinationPort) {
this.buffer = buffer;
host = destinationHost;
port = destinationPort;
}
@Override
public void run() {
if(offset + PKT_SIZE < buffer.length) {
byte[] tmp_pkt_buffer = new byte[PKT_SIZE];
System.arraycopy(buffer, offset, tmp_pkt_buffer, 0, PKT_SIZE);
try {
socket.send( new DatagramPacket(tmp_pkt_buffer, tmp_pkt_buffer.length, InetAddress.getByName(host), port) );
offset += tmp_pkt_buffer.length;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
TimerTask ( ) . TimerTask, , , , .
, 15 + (). , 0,5 .
, Thread.sleep ( nano-seconds true, - ). , 6 . Timer, , . , . , , . Timer , .
. ( ) Java " ", " " ) , WRONG. . Java 5 , , :)