Java Thread.setPriority()工作不正常?

Java Thread.setPriority()工作不正常?,java,multithreading,class,jakarta-ee,Java,Multithreading,Class,Jakarta Ee,我只是在玩线。我正在多线程程序中读取两个文本文件a.txt和b.txt。 我所做的是为从a.txt读取数据的线程分配更高的优先级。 但这并没有起作用。 a、 先读取txt文件,否则会发生异常情况。 另外,一个例外也在发生。 有人来帮我吗 void main() FileReaderA public class FileReaderA implements Runnable { File f = new File("D:/a.txt") ; FileReader fr ; BufferedR

我只是在玩线。我正在多线程程序中读取两个文本文件a.txt和b.txt。 我所做的是为从a.txt读取数据的线程分配更高的优先级。 但这并没有起作用。 a、 先读取txt文件,否则会发生异常情况。 另外,一个例外也在发生。 有人来帮我吗

void main()

FileReaderA

 public class FileReaderA  implements Runnable
 {
File f = new File("D:/a.txt") ;
FileReader fr ;
BufferedReader br ;
public FileReaderA()
{
    try {
        fr = new FileReader(f);  
        br  =  new BufferedReader(fr);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(FileReaderA.class.getName()).log(Level.SEVERE, null, ex);
    }
}

@Override
public void run() {
    try {       
        String s;
        s = br.readLine();
        do
        {
        System.out.println(s);
        s = br.readLine();
        }
        while(! s.equals(""));
        //To change body of generated methods, choose Tools | Templates.
    } catch (IOException ex) {
        System.out.println("IO Exception..");
    }
   }    
   }
FileReaderB

 public class FileReaderB implements Runnable
 {


 File f = new File("D:/b.txt") ;
 FileReader fr ;
 BufferedReader br ;
 public FileReaderB()
 {
    try {
        fr = new FileReader(f);  
        br  =  new BufferedReader(fr);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(FileReaderB.class.getName()).log(Level.SEVERE, null, ex);
    }
 }

 @Override
 public void run() {
    try {       
        String s1;
        s1 = br.readLine();
        do
        {
        System.out.println(s1);
        s1 = br.readLine();
        }
        while(!s1.equals(" "));
        //To change body of generated methods, choose Tools | Templates.
     } catch (IOException ex) {
        System.out.println("IO Exception..");
    }
 }    
 }
输出

 run:
 1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 Exception in thread "Thread-4" java.lang.NullPointerException
at introtothreading.FileReaderB.run(FileReaderB.java:39)
at java.lang.Thread.run(Thread.java:744)
2-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
5-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1-bbbbbbbbbbbbbbbbbbbbbbbb
2-bbbbbbbbbbbbbbbbbbbbbbbb
3-bbbbbbbbbbbbbbbbbbbbbb
4-bbbbbbbbbbbbbb
5-bbbbbbbbbbbbbbbbbbbbbbbbbbbb
6-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
7-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
8-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6-bbb
7-bbbbbbbbbbbbbb
8-bbbbb
9-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
BUILD SUCCESSFUL (total time: 10 seconds)


**output2**


 1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 1-bbbbbbbbbbbbbbbbbbbbbbbb
 2-bbbbbbbbbbbbbbbbbbbbbbbb
 3-bbbbbbbbbbbbbbbbbbbbbb
 4-bbbbbbbbbbbbbb
 5-bbbbbbbbbbbbbbbbbbbbbbbbbbbb
 6-bbb
 7-bbbbbbbbbbbbbb
 8-bbbbb
 9-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 2-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 3-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 4-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 5-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 6-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 7-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 8-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 Exception in thread "Thread-4" java.lang.NullPointerException
at introtothreading.FileReaderB.run(FileReaderB.java:39)
at java.lang.Thread.run(Thread.java:744)
还有我的

a.txt文件包含

1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

2-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

3-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

4-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

5-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

6-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

7-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

8-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

b.txt文件包含

1-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

2-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

3-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

4-bbbbbbbbbbbbbbbbbbbb

5-BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

6-bbb

7-bbbbbbbbbbbbbbbbbb

8-BBB


9-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb。我建议使用更大的文件来查看明显的效果。尝试复制文件的内容,直到您有大约100Kb的数据,您应该会看到很大的不同


您将获得一个
NullPointerException
,因为
readLine
在文件末尾返回null,请参阅

首先,在java线程中设置优先级并不是一种先执行一件事再执行另一件事的可靠方法。相反,更明智的做法是,在你们想连续发生的事件之间建立一种具体的“先发生后发生”的关系

您在这里遇到的问题是,您在t4上调用start之前,第二次调用t5上的start。虽然t4的优先级更高,但由于您的计算机有多个处理器,t5在t4之前启动,并且几乎肯定会在读取A文件之前完成文件的读取

您的异常是由于您在run方法中连续读取行并比较它们而没有首先检查它们是否为null。使用while循环而不是do-while


将来使用线程池和队列,并使用调试器找出抛出异常的原因。

这种多线程方式在Java中已被弃用相当长一段时间了。请立即使用线程池和优先级队列。
 run:
 1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 Exception in thread "Thread-4" java.lang.NullPointerException
at introtothreading.FileReaderB.run(FileReaderB.java:39)
at java.lang.Thread.run(Thread.java:744)
2-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
5-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1-bbbbbbbbbbbbbbbbbbbbbbbb
2-bbbbbbbbbbbbbbbbbbbbbbbb
3-bbbbbbbbbbbbbbbbbbbbbb
4-bbbbbbbbbbbbbb
5-bbbbbbbbbbbbbbbbbbbbbbbbbbbb
6-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
7-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
8-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6-bbb
7-bbbbbbbbbbbbbb
8-bbbbb
9-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
BUILD SUCCESSFUL (total time: 10 seconds)


**output2**


 1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 1-bbbbbbbbbbbbbbbbbbbbbbbb
 2-bbbbbbbbbbbbbbbbbbbbbbbb
 3-bbbbbbbbbbbbbbbbbbbbbb
 4-bbbbbbbbbbbbbb
 5-bbbbbbbbbbbbbbbbbbbbbbbbbbbb
 6-bbb
 7-bbbbbbbbbbbbbb
 8-bbbbb
 9-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 2-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 3-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 4-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 5-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 6-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 7-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 8-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 Exception in thread "Thread-4" java.lang.NullPointerException
at introtothreading.FileReaderB.run(FileReaderB.java:39)
at java.lang.Thread.run(Thread.java:744)