Hvordan?
Lad os tage denne:
- public class Inconsistent implements Runnable {
- static class TwoNumbers {
- public int first, second;
- public TwoNumbers(int f, int s) {
- first = f;
- second = s;
- }
- }
-
- private TwoNumbers numbers;
-
- public void run() {
- numbers = new TwoNumbers(0, 10);
- while (true) {
- numbers.first = (int)(Math.random() * 100.0);
- try {
- Thread.sleep(100);
- } catch (Exception e) {}
- numbers.second = 10 - first;
- }
- }
- }
Summen af numbers.first og numbers.second skal altid være 10. Det er den ikke hvis tråden afsluttes efter at 'first' er blevet ændret men inden 'second' ændres.
Hvordan vil du stoppe tråden uden at 'numbers' objektet kommer i en inkonsistent tilstand?
Den "rigtige" måde er IKKE at bruge 'while (true)' men 'while (running)' og give en mulighed for at påvirke 'running' variablen, men det kræver lidt samarbejde fra programmøren.
Det kan du ikke regne med i dit tilfælde, så der er ikke nogen vej udenom at objekter kan være i en inkonsistent tilstand, men det er stadig bedre end en uendelig løkke...måske :-)
Indlæg senest redigeret d. 20.09.2012 10:56 af Bruger #2695