![](/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.