小编Ral*_*f H的帖子

System.nanoTime与System.currentTimeMillis

根据其文档,System.nanoTime返回 纳秒,因为一些固定但任意的原始时间.但是,在所有x64机器上我尝试了下面的代码,有时间跳转,移动固定的原始时间.我的方法可能存在一些缺陷,使用替代方法(此处为currentTimeMillis)获取正确的时间.但是,测量相对时间(持续时间)的主要目的也会受到负面影响.

我在比较不同队列到LMAX的Disruptor时试图测量延迟时遇到了这个问题,我有时会出现非常负的延迟.在这些情况下,开始和结束时间戳由不同的线程创建,但延迟是在这些线程完成后计算的.

我的代码在这里花费时间使用nanoTime,计算currentTimeMillis时间中的固定原点,并比较调用之间的原点.因为我必须在这里提出一个问题:这段代码有什么问题?为什么会发现违反固定原产地合同的行为?或者不是吗?

import java.text.*;

/**
 * test coherency between {@link System#currentTimeMillis()} and {@link System#nanoTime()}
 */
public class TimeCoherencyTest {

    static final int MAX_THREADS = Math.max( 1, Runtime.getRuntime().availableProcessors() - 1);
    static final long RUNTIME_NS = 1000000000L * 100;
    static final long BIG_OFFSET_MS = 2;

    static long startNanos;
    static long firstNanoOrigin;
    static {
        initNanos();
    }

    private static void initNanos() {
        long    millisBefore = System.currentTimeMillis();
        long    millisAfter;
        do {
            startNanos = System.nanoTime();
            millisAfter = System.currentTimeMillis();
        } …
Run Code Online (Sandbox Code Playgroud)

java multithreading nanotime

7
推荐指数
1
解决办法
2238
查看次数

sun.nio.ch.WindowsSelectorImpl.setWakeupSocket0 有没有挂起的原因

在 JDK 1.6.024 中,我们看到线程消耗接近 100% 的 CPUsetWakeupSocket0()用于套接字连接。这个本机方法被调用setWakeupSocket()wakeup()在这个特定的SelectorImpl. 什么可能导致此方法卡住几分钟?

2019 年 2 月更新:我们还看到 JDK 1.8 较晚版本的执行时间延长。

java sockets nio freeze wakeup

5
推荐指数
0
解决办法
634
查看次数

如何同时运行线程?

我想有两个独立的线程运行不同类的两个不同的实例,我希望它们同时执行run命令.

我做了一个练习课,以证明我遇到的问题.一名赛车手向前跑,另一名则向后跑.

public class testCount {

    public static void main(String args[]) {
        testCount countCompetition = new testCount();
        countCompetition.run();
    }

    public void run() {
        (new Thread(new racer1())).start();
        (new Thread(new racer2())).start();
    }

    public class racer1 implements Runnable {
        public void run() {
            for(int x = 0; x < 100; x++) {
                System.out.println(x);
            }
        }
    }
    public class racer2 implements Runnable {
        public void run() {
            for(int y = 100; y > 0; y--) {
                System.out.println(y);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的结果

1
2 …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading runnable

5
推荐指数
2
解决办法
1万
查看次数

Hibernate支持并发获取数据吗?

我知道这是一个困难的问题,因为它不仅取决于休眠,还取决于我们使用它的特定方式。我们在应用程序中使用 hibernate 4,可能以错误的方式使用,但事实就是如此。

因此,我们加载整个类层次结构,并在一个大语句中连接子类表,并按 150K 行的顺序将其转换为对象。

由于对象有很多字段需要设置(~100),我们希望并行化迭代结果集并获取各个行的循环。这在休眠中可能吗?是否有一个时间点,Hibernate 已经从数据库接收到了所有结果,并且可以使用这些数据来水合对象,因此我们可以使用多线程来加速获取大型结果集?

这是否有意义,或者是否最好更改数据结构和映射以摆脱多表连接?

实际上,加载 150K 个这些对象需要一分钟或每个实体 0.3 毫秒。我们拥有包含更多条目的更简单的表,加载速度提高了一个数量级,为 0.02 毫秒/实体。在初始化阶段之后我们不会加载其他实体,整个数据库的初始化阶段需要超过 5 分钟。

如果我们通过将类层次结构不暴露给数据库来删除连接,并切换到基于组合的数据结构,我们可能会获得更简单的表加载,而不是复杂的连接,但代价是多个表加载,而不是一个将这些加载合并为一个的连接。

但问题仍然存在:如果我们要加载这么多行,并且在填写每个对象的字段时要调用相应的设置器,这可以并行完成吗?

java concurrency orm hibernate jpa

5
推荐指数
1
解决办法
2137
查看次数

Java错误"重写方法不会抛出java.io.IOException"?

这可能是一个非常新手的问题,但有没有办法启动一个创建套接字的线程?因为我不能做到以下几点:

public void run() throws IOException{

  Socket sock2 = new Socket("localhost", 9898);


}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

在CapitalizeClient中run()无法实现java.lang.Runnable中的run()重写方法不会抛出java.io.IOException

或者我应该只在主要创建套接字代码?我想定期创建用作心跳的套接字.谢谢

java sockets

0
推荐指数
1
解决办法
2417
查看次数

递增图像的x位置然后将其递减在java中不起作用

我试图制作一个8益智游戏,我的问题是,当x1的值让一个特定图像的x位置的70增加直到它达到170然后它将递减直到它再次达到70,但这个减少没有工作,图像不再移动到原来的位置,但它只是颤抖.为什么会发生这种情况.为了澄清所有这些内容,您可以查看下面的代码:

run.java

public class run extends Applet implements Runnable{
    public Image im;    
    public int x1=70, y1=70;
    public int x2=170, y2=70;
    public int x3=270, y3=70;
    public int x4=70, y4=170;
    public int x5=170, y5=170;
    public int x6=270, y6=170;
    public int x7=70, y7=270;
    public int x8=170, y8=270;
    public int x9=270, y9=270;

    public Image offscreen;
    public Graphics d;
    public BufferedImage container;
    public BufferedImage[] tile = new BufferedImage[10];
    private File loadThis;

     public void combi1(){
         if(x1<170 && x1>=70){
             x1+=1; y2+=1; x5-=1; y4-=1;
             return;       
         }
         if(x1>=70){
             x1-=1; …
Run Code Online (Sandbox Code Playgroud)

java image increment decrement

0
推荐指数
1
解决办法
95
查看次数