我有一个Java应用程序,它包含两个在不同Java类中创build的线程。 一个线程用于写入图像文件,另一个线程同时读取同一个文件。 两个线程都在同时运行。
但是经过几次尝试,线程被阻塞,并显示以下exception:
java.lang.ArrayIndexOutOfBoundsException: -1 at java.util.ArrayList.elementData(ArrayList.java:371) at java.util.ArrayList.get(ArrayList.java:384) at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:373) at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(JPEGImageReader.java:476) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(JPEGImageReader.java:597) at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1054) at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1034) at javax.imageio.ImageIO.read(ImageIO.java:1448) at javax.imageio.ImageIO.read(ImageIO.java:1308) at java.lang.Thread.run(Thread.java:722)
在这个例外之后,应用程序自行终止。 如何解决这个问题呢?
我如何在两个不同的Java类中同步这两个线程?
java.lang.ArrayIndexOutOfBoundsException
是由试图访问某个不存在的数组值的代码引起的。
例如:
String[] myArray = new String[5]; for(int i = 0; i < myArray.length; i++) { myArray[i] = "Value: " + i; } System.out.println(array[6].toString());
由于你的数组只有5个长,而你试图访问不存在的第6个,你会得到一个异常。
如果您尝试读取同一个文件,请确保在访问共享资源时已将同一个对象上的线程同步。 这可能会抛出ArrayIndexOutOfBoundsException