Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在stacktrace程序中获取异常_Java_Multithreading - Fatal编程技术网

Java 在stacktrace程序中获取异常

Java 在stacktrace程序中获取异常,java,multithreading,Java,Multithreading,我开发了这个程序来证明,如果线程在静态同步方法中,那么一个线程仍然可以从java中的该方法进入其他静态同步方法,但是我的程序抛出了异常,请告知它出了什么问题,下面是代码 package com.synchrnozie; class MyRunnable18 implements Runnable { @Override public void run() { method1(); } static synchronized void meth

我开发了这个程序来证明,如果线程在静态同步方法中,那么一个线程仍然可以从java中的该方法进入其他静态同步方法,但是我的程序抛出了异常,请告知它出了什么问题,下面是代码

package com.synchrnozie;

class MyRunnable18 implements Runnable {

    @Override
    public void run() {
        method1();
    }

    static synchronized void method1() {
        System.out.println("static synchronized void method1() started");
        method2();
        System.out.println("static synchronized void method1() ended");
    }

    static synchronized void method2() {
        System.out.println("in static synchronized method2()");
        method3();
    }

    static synchronized void method3() {
        System.out.println("in static synchronized method3()");
        method3();
    }

}

public class staticNesting {
    public static void main(String args[]) throws InterruptedException {
        MyRunnable18 MyRunnable18 = new MyRunnable18();
        Thread thread1 = new Thread(MyRunnable18, "Thread-1");
        thread1.start();
    }

}
下面是异常堆栈跟踪

Exception in thread "Thread-1" java.lang.StackOverflowError
    at sun.nio.cs.SingleByte.withResult(Unknown Source)
    at sun.nio.cs.SingleByte.access$000(Unknown Source)
    at sun.nio.cs.SingleByte$Encoder.encodeArrayLoop(Unknown Source)
    at sun.nio.cs.SingleByte$Encoder.encodeLoop(Unknown Source)
    at java.nio.charset.CharsetEncoder.encode(Unknown Source)
    at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
    at sun.nio.cs.StreamEncoder.write(Unknown Source)
    at java.io.OutputStreamWriter.write(Unknown Source)
    at java.io.BufferedWriter.flushBuffer(Unknown Source)
    at java.io.PrintStream.write(Unknown Source)
    at java.io.PrintStream.print(Unknown Source)
    at java.io.PrintStream.println(Unknown Source)
    at com.synchrnozie.MyRunnable18.method3(staticNesting.java:24)
    at com.synchrnozie.MyRunnable18.method3(staticNesting.java:25)

你的method3()无限地调用method3(),也许这就是原因

您正在对method3进行递归调用,这将导致StackFlow错误

 static synchronized void method3() {
            System.out.println("in static synchronized method3()");
            method3();
        }
您正在重复地从method3()调用method3(),所以这就结束了。你可以参考这个