java – 可运行的界面示例

前端之家收集整理的这篇文章主要介绍了java – 可运行的界面示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
public class CreateThreadRunnableExample implements Runnable {

    public void run() {

        for (int i = 0; i < 5; i++) {
            System.out.println("Child Thread : " + i);

            try {
                Thread.sleep(50);
            } catch (InterruptedException ie) {
                System.out.println("Child thread interrupted! " + ie);
            }
        }

        System.out.println("Child thread finished!");
    }

    public static void main(String[] args) {

        Thread t = new Thread(new CreateThreadRunnableExample(),"My Thread");

        t.start();

        for (int i = 0; i < 5; i++) {

            System.out.println("Main thread : " + i);

            try {
                Thread.sleep(100);
            } catch (InterruptedException ie) {
                System.out.println("Child thread interrupted! " + ie);
            }
        }
        System.out.println("Main thread finished!");
    }
}

在这个程序中,两种睡眠方式都使用了不同的时间..,所以如果主线程运行时间,那么子线程必须运行2次,但它只运行一次….我们采取可运行或运行的概念然后当主线程结束时,那么2个子线程将处于就绪状态,为什么只有一个子线程运行.

解决方法

睡眠方法不是100%时间准确,如 JavaDoc所述:

public static void sleep(long millis)
throws InterruptedException

Causes the currently executing thread to sleep (temporarily cease execution) for the
specified number of milliseconds,subject to the precision and
accuracy of system timers and schedulers. The thread does not lose
ownership of any monitors.

所以基本上这些代码有时候可以像预期一样工作,而其他的时候不行.

另外,你似乎只有一个孩子,所以你为什么期待2?

编辑:从理论上说,当主线程睡着时,子线程应该执行两次.话虽如此,如JavaDoc所述,sleep方法执行的准确性取决于运行它的系统,有时候可能会让其按预期工作,而在其他时间不执行.因此,例如,您可能会遇到主线程睡眠的情况,97毫秒,而不是100,而孩子睡眠时间为53毫秒.这将导致小孩只执行一次.

另一个选择是做这样的事情:while(currentTime = = timeNeededToElapse){currentTime = …}.这导致一个紧张的循环,这可以提供更好的控制,但仍然是,据我所知,不是100%准确,更不要说,你将消耗cpu周期有效地做什么,所以谨慎使用.

猜你在找的Java相关文章