相关疑难解决方法(0)

Java是"通过引用传递"还是"传递价值"?

我一直认为Java是传递引用的.

但是,我看过一些博客文章(例如,这个博客)声称它不是.

我不认为我理解他们所做的区别.

解释是什么?

java methods parameter-passing pass-by-reference pass-by-value

6270
推荐指数
80
解决办法
189万
查看次数

我应该在Java程序中使用多少个线程?

我最近继承了一个小型Java程序,它从大型数据库中获取信息,进行一些处理并生成有关信息的详细图像.原作者使用单个线程编写代码,然后对其进行修改以允许它使用多个线程.

在代码中他定义了一个常量;

//  number of threads
public static final int THREADS =  Runtime.getRuntime().availableProcessors();
Run Code Online (Sandbox Code Playgroud)

然后设置用于创建映像的线程数.

我理解他的理由是线程数不能大于可用处理器的数量,因此将其设置为从处理器中获取全部潜力的数量.它是否正确?或者是否有更好的方法来充分利用处理器的潜力?

编辑:为了进一步澄清,正在线程化的特定算法会扩展到正在创建的图片的分辨率(每个像素1个线程).这显然不是最好的解决方案.该算法所做的工作是一直需要的工作,并且是完全数学运算,没有锁或其他因素会导致任何给定的线程休眠.我只想最大化程序CPU利用率,以减少完成时间.

java multithreading

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

是否可以在不重复创建线程的情况下使用多线程?

首先,再次,感谢已经回答了我的问题.我不是一个非常有经验的程序员,这是我第一次使用多线程.

我得到了一个像我的问题一样工作的例子.我希望这可以缓解我们的情况.

public class ThreadMeasuring {
private static final int TASK_TIME = 1; //microseconds
private static class Batch implements Runnable {
    CountDownLatch countDown;
    public Batch(CountDownLatch countDown) {
        this.countDown = countDown;
    }

    @Override
    public void run() {         
        long t0 =System.nanoTime();
        long t = 0;
        while(t<TASK_TIME*1e6){ t = System.nanoTime() - t0; }

        if(countDown!=null) countDown.countDown();
    }
}

public static void main(String[] args) {
    ThreadFactory threadFactory = new ThreadFactory() {
        int counter = 1;
        @Override
        public Thread newThread(Runnable r) {
            Thread t = new …
Run Code Online (Sandbox Code Playgroud)

java multithreading threadpool

3
推荐指数
1
解决办法
857
查看次数