![](/img/trans.png)
[英]Unable to understand the behaviour of thread synchronization in following java code
[英]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
已關閉時會出現異常。
解決它的一種方法是不關閉掃描儀。
順便說一句, ThreadP1
, ThreadP2
似乎做同樣的事情。 考慮改為創建相同 class 的 2 個實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.