Java — khi nào và làm thế nào tôi nên sử dụng biến thread safe là gì

      149

I am very confused that any class is Thread safe. I am understanding that, if any class is thread safe then it has some specific on its methods(as synchronized). Is it right or wrong? Please help me by elaborating on the meaning of it.

Bạn đang xem: Java — khi nào và làm thế nào tôi nên sử dụng biến thread safe là gì


*

*

As Seth stated thread safe means that a method or class instance can be used by multiple threads at the same time without any problems occuring.

Consider the following method:

private int myInt = 0;public int AddOne() int tmp = myInt; tmp = tmp + 1; myInt = tmp; return tmp;Now thread A và thread B both would lượt thích to exedễ thương AddOne(). but A starts first và reads the value of myInt (0) into tmp. Now for some reason the scheduler decides lớn halternative text thread A và defer execution to thread B. Thread B now also reads the value of myInt (still 0) inkhổng lồ it"s own variable tmp. Thread B finishes the entire method, so in the end myInt = 1. And 1 is returned. Now it"s Thread A"s turn again. Thread A continues. And adds 1 to lớn tmp (tmp was 0 for thread A). And then saves this value in myInt. myInt is again 1.

Xem thêm: Nghĩa Của Từ Stagnant Là Gì, Nghĩa Của Từ Stagnant, Qi Deficiency: Symptoms, Treatment, And More

So in this case the method AddOne() was called two times, but because the method was not implemented in a thread safe way the value of myInt is not 2, as expected, but 1 because the second thread read the variable myInt before the first thread finished updating it.

Creating thread safe methods is very hard in non trivial cases. And there are quite a few techniques. In Java you can mark a method as synchronized, this means that only one thread can exeđáng yêu that method at a given time. The other threads wait in line. This makes a method thread safe, but if there is a lot of work to be done in a method, then this wastes a lot of time. Another technique is lớn "mark only a small part of a method as synchronized" by creating a loông xã or semaphore, & locking this small part (usually called the critical section). There are even some methods that are implemented as lockless thread safe, which means that they are built in such a way that multiple threads can race through them at the same time without ever causing problems, this can be the case when a method only executes one atomic Điện thoại tư vấn. Atomic calls are calls that can"t be interrupted & can only be done by one thread at a time.