Thread-safe
「スレッドセーフ」という保証は、具体的には何を保護しているか。
import java.util.*; public class Main { static Vector<Object> vec = new Vector<Object>(); static ArrayList<Object> arr = new ArrayList<Object>(); public static void main(String[] args) { new Thread(new Runnable() { public void run() { for (;;) { vec.clear(); vec.addAll(arr); } } }).start(); new Thread(new Runnable() { public void run() { for (;;) { if (arr.size() > 10000) arr.clear(); arr.add(new Object()); } } }).start(); } }
public class Main { static StringBuffer buf1 = new StringBuffer(), buf2 = new StringBuffer(); public static void main(String[] args) { new Thread(new Runnable() { public void run() { for (;;) { buf1.setLength(0); buf1.append(buf2); } } }).start(); new Thread(new Runnable() { public void run() { for (;;) { if (buf2.length() == 0) buf2.append("hogehoge"); buf2.deleteCharAt(0); } } }).start(); } }
やはりマルチスレッドのプログラムは難しい。