相关疑难解决方法(0)

在继续之前,如何让我的方法等待文件存在

有一个外部程序可以创建XML文件,但创建可能需要一段时间.我需要我的Java程序等到文件存在之后再继续.

我一直在阅读有关同步块的内容,我读到我可以这样做:

synchronized(this) {
    while (!file.exists) { this.wait(); }
}
Run Code Online (Sandbox Code Playgroud)

说实话,我对同步任务并不是很了解,所以我想知道我是否在正确的轨道上,或者我是否已经离开了.

java

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

Object.wait()超过了超时

什么可以解释持续时间Object.wait(timeout)超过提供的超时值?

long start = System.currentTimeMillis();
obj.wait(1000);
long duration = System.currentTimeMillis() - start;
// sometimes (very rarely) duration may exceed 1500
Run Code Online (Sandbox Code Playgroud)

上下文:在一个非常复杂的软件深处的某个地方,有一段代码可以wait生成这样的代码并在持续时间过长的情况下生成警告日志.在流量高的生产环境中,一些日志会报告巨大的等待(例如30秒).所以我试图重现它,了解可能发生的事情以及如何修复/改进它.

java

7
推荐指数
2
解决办法
1059
查看次数

Java同步混乱

对不起,如果这是非常明显或已在其他地方回答.我找不到任何东西.我有以下代码:

public class SimpleThread extends Thread {
    public static Integer sharedVal = 0;
    public SimpleThread() {

    }
    @Override
    public void run() {
       while(true) {           
           iterator();
       }
    }

    public void theSleeper() {
        System.out.println("Thread: " + this.getId() + " is going to sleep!");
        try {
            this.sleep(5000);
        } catch(Exception e) {

        }
    }

    public void iterator() {
        synchronized(sharedVal)  {
            System.out.println("Iterating sharedVal in thread: " + this.getId());
            sharedVal++;
            System.out.println(sharedVal);
            theSleeper();
            System.out.println("Thread : " + getId() + " is done sleeping, trying to iterate again..."); …
Run Code Online (Sandbox Code Playgroud)

java concurrency

6
推荐指数
2
解决办法
244
查看次数

睡眠线程时到底发生了什么

我想知道操作系统中的任务调度程序如何处理休眠线程.

我的意思是,调度程序是否仍然检查休眠线程,或者在确定哪个线程在接下来的10毫秒内处于活动状态或者给定的时间长时完全跳过.

我之所以这样问,是要弄清楚一个睡眠线程是否会消耗CPU周期(尽管很少).

那么有谁知道会发生什么?

你知道从Windows到Linux有什么不同吗?

linux windows operating-system

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

线程"main"java.lang.IllegalMonitorStateException中的异常

我有工作ThreadJava,我得到下面的错误-我不明白为什么?

码:

import java.util.Random;

public class Test {


    public static void main(String[] args) throws InterruptedException {
     Vlakno sude = new Vlakno("myName"); // Vlakno = thread class

        sude.start();
        sude.wait(); // ERROR IS ON THIS LINE
    }

}

class Vlakno extends Thread {

    private boolean canIRun = true;
    private final String name;

    Vlakno(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        while (canIRun) {
          //  System.out.println("Name: " + name);
        }
    }

    public void mojeStop() { …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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

multiThreading加入和等待之间的区别,通知

我还没有工作multithreading,加入和等待有什么区别,通知方法?差异仅限于获取lock和禁止其他人threads访问它或是否有其他用例?

为什么我应该去waitnotifymultithreading何时join可用于完成thread执行?

如果提供了任何实时示例,将会很有帮助

java multithreading java-threads

3
推荐指数
2
解决办法
5356
查看次数

实现run()的有效方法是什么?

它应该只包含一个循环

while (true) { ... }

我发现它不那么高效,因为它消耗了很多CPU.我希望我的线程能够继续等待,但是最好的方法是让它等待而不消耗这么多CPU?

java multithreading

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

保持Java程序永远运行或持续很长时间的最佳方法是什么?

我有java应用程序,它支持多个工作流程.使用从命令行传递给它的参数选择工作流.在其中一个工作流应用程序需要运行无限时间.我使用以下代码实现了相同的目标

switch (args[0]) { 
    case "-runForever":
     // Some Computation
     Thread.sleep(Long.MAX_VALUE);
     break;
    case "otherCase:
     //dosomething
     break;
}
Run Code Online (Sandbox Code Playgroud)

这是实现所需功能的好方法吗?

java unix

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

如何在Java中安全地停止和恢复线程?

我有运行的线程,我想停止,稍后在恢复.我学会了不使用stop()等,因为这些已被弃用,并且下面的代码似乎成功停止了线程.它只是退出运行方法.现在,我该如何重新启动它?如果我调用start()方法,它说该线程仍在运行,那么在这种情况下会直接调用run()吗?会不会引起任何问题?BTW这适用于Android应用程序,如果这有任何区别.

private volatile stopThread;

public void stopButton() {
    // this is called when button is clicked
    // and thread is already started and running
    stopThread= true;
}

public void run() {

    while (!stopThread) {
        // do something here
    }

    stopThread=false;
}
Run Code Online (Sandbox Code Playgroud)

编辑:它是一个在线程启动时启动的计时器,然后可以暂停并重新启动.所以timer是一个包含Thread对象的类(我已经使用SurfaceView扩展了类).

java multithreading thread-safety

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

Java:线程不起作用

我正在尝试在for循环中启动一个线程.此任务应该只等待一秒钟(Thread.sleep()),因此每次循环重新开始时,都会启动一个新线程,它应该导致线程之后的代码等待它执行.

public void count()
{
    for(int i = 29; i>=0; i--)
    {
        Thread t1;
        t1 = new Thread(new TimerClass());
        t1.start();
        String s = String.valueOf(i); 
        jLabel6.setText(s);
        System.out.println(s);
    }
}


public class TimerClass implements Runnable{

   @Override
   public void run()
   {
       try{
           Thread.sleep(1000);
           System.out.println("Timer");
       } catch(InterruptedException e)
       {
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我在两个方法System.out.println()中实现,以检查它们是否实际执行.我明白了:

29
28
27
26
...//25 - 3
2
1
0
Timer
Timer
Timer
//in all 29 times Timer
Run Code Online (Sandbox Code Playgroud)

所以应该是29,定时器,28,定时器等,但事实并非如此.有谁知道代码有什么问题?非常感谢.

java multithreading

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

Thread.sleep和object.wait

两者都试图做类似的事情,这对线程产生了一些影响.

我知道thread.sleep是让CURRENT线程休眠,等待可以让任何线程等待,如果他们试图获取对象的锁定.

问题是,大部分时间他们都在做类似的事情 - 是什么让你选择一个而不是另一个?

java

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

为什么同步锁定另一种方法?

我是java中的多线程的新手.我写了一些类来测试synchronized的函数.我有一些使用synchronized的方法:

    public class ShareUtil {
        private static Queue<Integer> queue = new LinkedList<Integer>();
        public static synchronized void do1(){
            System.out.println("do1");
            sleep();
        }
        public static synchronized void do2(){
            System.out.println("do2");
            sleep();
        }
        private static void sleep(){
            try {
                Thread.sleep(1000*50000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

你可以看到有两种方法使用synchronized,我运行两个线程分别使用这两种方法.

class Run1 implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        ShareUtil.do1();
    }

}
class Run2 implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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