在下列情况下会发生什么?
Timer t = new Timer();
t.schedule(...);
t = new Timer();
Run Code Online (Sandbox Code Playgroud)
具体来说,在我将一个新的Timer实例分配给t之后,我在Timer t上安排的任务会发生什么?
如果我需要对对象内部的int字段进行原子访问,将字段声明为AtomicInteger还是需要使用AtomicIntegerFieldUpdater就足够了?(为什么?)
对于通过 ThreadPoolExecutor 执行的线程,是否有类似 join() 的方法?
如果我向执行器提交一些 Callables 并在它们返回的 Future 上使用 get() 方法,我会得到与 Thread.join() 类似的行为吗?
java doc说append方法是线程安全的.但是,我记得当我尝试从不同的线程(几个月前)使用附加到文本区域时,我得到混乱的文本,其中线程1将附加一些字符,而线程2将附加一些其他字符.因此,我没有在jtextarea中获取STRINGstring,而是获得了SstTrRINingG.
两者之间会有什么不同:
或者他们都可以解决问题吗?谢谢
我想BackgroundWorker在运行时更改附加到的委托.下面的东西会起作用吗?
DoWorkEvenHandler dweh = new DoWorkEventHandler(method1);
backgroundworker.DoWork += dweh;
Run Code Online (Sandbox Code Playgroud)
并在某些时候DoWork通过重新分配引用来更改与之关联的委托dweh:
dweh = new DoWorkEventHandler(method2);
Run Code Online (Sandbox Code Playgroud) 代码说明了我的问题:
public class Linkedlisttest {
public static void main(String[] args) {
Linkedlisttest test = new Linkedlisttest();
test.go(args);
}
public void go(String[] args) {
int cpus = Runtime.getRuntime().availableProcessors();
ThreadPoolExecutor tpe = new ThreadPoolExecutor(cpus, cpus * 2, 1L,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
String numbersarray[] = {"one", "two", "three", "four", "five"};
LinkedList<String> numbers = new LinkedList(Arrays.asList(numbersarray));
for (int index = 0; index < 2; index++) {
tpe.execute(new removeNumbers(numbers, index));
}
}
class removeNumbers implements Runnable {
LinkedList<String> localnumbers;
int index;
public removeNumbers(LinkedList<String> localnumbers, int …Run Code Online (Sandbox Code Playgroud)