我想用Java模拟TCP。
我找到了System.nanotime()方法,但是没有方法可以在指定的微秒或纳秒内阻塞线程。如果有这样的方法,那么请让我知道。system.nanotime()只是给出了以纳秒为单位的相对时间间隔。
我可以使用System.nanotime()在使用busy-loop的线程中执行纳秒级延迟,但这将浪费CPU时间,而CPU本来可以用于接收数据线程或处理线程。
另一个令人困惑的问题:
public class MyClass {
public static void main(String args []){
Runnable r = new Runnable() {
public void run() {
long s = System.nanoTime();
//Thread.yield(); // Try for yield, need to check - in how much time high priority thread will be scheduled back after yielding
try{
Thread.sleep(1);
}catch(Exception e){
}
long e = System.nanoTime() - s;
System.out.println(Thread.currentThread().getName()+e);
}
};
Thread t1 = new Thread(r, "Thread T1: ");
t1.setPriority(Thread.MAX_PRIORITY);
t1.start();
Thread t2 = new Thread(r, "Thread T2: ");
t2.setPriority(Thread.MIN_PRIORITY);
t2.start();
Thread t3 = new Thread(r, "Thread T3: ");
t3.setPriority(Thread.NORM_PRIORITY);
t3.start();
Thread t4 = new Thread(r, "Thread T4: ");
t4.setPriority(Thread.MAX_PRIORITY);
t4.start();
long s = System.nanoTime();
try{
Thread.sleep(1);
}catch(Exception e){
}
long e = System.nanoTime() - s;
System.out.println("Main: "+e);
}
}
ThreadT3:27555ThreadT2:139799ThreadT1:152361主:93199ThreadT4:29986
第三次跑-
ThreadT4:724525ThreadT2:1050319主干:752486ThreadT1:941316ThreadT3:1000883
为长帖道歉。谢谢你阅读整篇文章。
请注意,thread.sleep(timeout)
保证线程
将至少Hibernate超时毫秒(取决于底层系统的精度),但它可能Hibernate更长时间。
有一个thread.sleep(millis,nanos)
,但是精度也不是很好。正如@Timbender在下面指出的,在OpenJDK 6-B14中,它甚至通过舍入和调用thread.sleep(millis)
来实现这一点。因此,可以肯定地说,在任何Java实现中,您都不能依赖它来Hibernate一段精确的时间间隔。
问题内容: 我想用Java模拟TCP。 为此,我有多个线程,例如每个TCP连接的发送者和接收者线程。 我的问题是,我想暂停(如Thread.sleep())线程数微秒的时间间隔。这样我就可以模拟流控制,发送者线程将在发送下一个数据包之前阻塞几微秒,同时接收和数据处理线程可以使用CPU。但是我找不到任何执行sleep()或wait()的方法来获得微秒或纳秒分辨率。如何以微秒或纳秒分辨率阻塞(暂停)J
好的,这里有一个奇怪的问题,我有问题(用gcc btw编译) 下面是用于命令提示的Mandelbrot分形生成器的源代码。我以前做过这项工作,我想加快自己的测试速度,看看我能以多快的速度生成命令提示符中实际生成Mandelbrot分形所需的代码。我经常这样做是为了给自己找点乐子 不管怎样,我遇到了一个新问题,我不太明白问题是什么。当分形呈现时,无论我设置了多少次迭代或什么转义值,它都将始终显示为椭
问题内容: 在Windows下,有一些方便的功能,如from 可以创建高分辨率计时器。Linux有类似的东西吗? 问题答案: 在此之前ows-queryperformancecounter-on-osx)有人问过它-但是基本上,您可以使用boostptime函数,或者可以基本实现相同目的的POSIX clock_gettime()函数。
我正在开发一个模拟器,我不知道如何将计时库测得的运行时间与固定的数字进行比较,例如(
我有一个java的列表。awt。图像,每个分辨率为300 DPI。我想打印它们,当我开始打印这些图像时(使用javax.PrintService API),只打印一些图像的一部分,因为Java的打印/3D类默认使用72DPI(相对于我的图像的300 DPI)。但是,当我使用72 DPI的图像(与Java默认值具有相同的分辨率)时,所有图像都可以很好地打印(打印整个图像时,而不仅仅是其中的一部分)。
问题内容: 我需要使用Java程序减小图像的大小(而不是宽度和高度)。他们为此提供了任何好的API吗? 我需要将大小从1MB减少到大约50kb-100 kb。当然,分辨率会降低,但这并不重要。 问题答案: 这是工作代码 这段代码对我来说很棒。如果需要调整图像大小,则可以在此处更改x和y比例J;