/** Synchronized method to add an element to a table **/ public void addElement( Patient newPatient ) { synchronized ( lock ) { Log query = incomingPatient.getLog(); results = query.getAllSearchResults(); for ( int k = 0; k < results.length; k++) { .... // add to table setMaxColSize(MyTable); tableContents.add(MyTable); } } }
避免多线程错误
有一些方法可以避免可怕的线程错误:
假如依靠线程优先级来使线程保持同步,那么测试 JVM 的各种类就显得非常重要。小心可能发生两个线程同时赋值给 long 和 double 变量。其讨厌的结果是一个线程的更改可能更改某个变量,而第二个线程可能再次改变同一个变量。请考虑对那些变量类型进行同步赋值。
double answer = 0; for (int i=0; i<10000; i++) { for (int j = 0; i<10000; j++) { answer = ((answer * i) + j) / j; } Thread.yield(); // Now other threads may run while this //runs in the background }