簡體   English   中英

在 java 中編寫線程同步代碼時,我遇到了以下錯誤

[英]While writing a code for thread synchronization in java i cam across the following error

所以我是java的初學者。

昨天在編寫線程同步代碼時,我遇到了一個錯誤java.util.NoSuchElementException 代碼和錯誤在下面指定。 這里線程之間的共享變量是a 從我可以從錯誤中猜到的變量b在取第二個值時遇到問題。


        class Sum
        {
            synchronized void addition(int a)
            {
                Scanner sc = new Scanner(System.in);
                System.out.println("enter vale of b: ");
                int b = sc.nextInt();
                sc.close();
                int c = a + b;
                System.out.println(c);
            }
        }
        class ThreadP1 extends Thread
        {
            Sum s1;
            ThreadP1(Sum s1)
            {
                this.s1 = s1;
            }
            public void run()
            {
                Scanner sc1 = new Scanner(System.in);
                System.out.println("enter element a: ");
                s1.addition(sc1.nextInt());
                sc1.close();
            }
        }
        class ThreadP2 extends Thread
        {
            Sum s1;
            ThreadP2(Sum s1)
            {
                this.s1 = s1;
            }
            public void run()
            {
                Scanner sc2 = new Scanner(System.in);
                System.out.println("enter element a: ");
                s1.addition(sc2.nextInt());
                sc2.close();
            }
        }
    
    
    
        public class Synchronisation1 
        {
            public static void main(String args[])
            {
                Sum obj3 = new Sum();
                ThreadP1 t12 = new ThreadP1(obj3);
                t12.start();
                ThreadP2 t13 = new ThreadP2(obj3);
                t13.start();
            }
        }

錯誤

>Thread-1 java.util.NoSuchElementException  
        >>at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        >>at java.base/java.util.Scanner.next(Scanner.java:1594)   
        >>at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
        >>at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
        >>at Sum.addition(Synchronisation1.java:8)
        >>at ThreadP2.run(Synchronisation1.java:40)

正如所評論的,通過關閉Scanner ,您將關閉System.in 后一種掃描器在意識到System.in已關閉時會出現異常。

解決它的一種方法是不關閉掃描儀。

順便說一句, ThreadP1ThreadP2似乎做同樣的事情。 考慮改為創建相同 class 的 2 個實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM