multithreading - Java threading issue? -
i wondering why result not 400 000. there 2 threads why gets blocked?
class intcell { private int n = 0; public int getn() {return n;} public void setn(int n) {this.n = n;} } class count extends thread { private static intcell n = new intcell(); @override public void run() { int temp; (int = 0; < 200000; i++) { temp = n.getn(); n.setn(temp + 1); } } public static void main(string[] args) { count p = new count(); count q = new count(); p.start(); q.start(); try { p.join(); q.join(); } catch (interruptedexception e) { } system.out.println("the value of n " + n.getn()); } }
why there problem that?
when 2 threads access 1 object @ same time, interfere each other, , result not deterministic. example, imagine p
reads value of n
, gets, say, 0, q
reads same value , gets 0 too, p
sets value 1 , q
sets 1 (because still thinks has value 0). value of n
increased 1, though both counters "incremented" once. need use synchronized
block make sure counters won't interfere each other. see https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html more.
Comments
Post a Comment