14.11.3 单一线程规则
基本原则:除了时间分配线程,不要再任何线程中接触Swing组件
特殊规则:
线程中可以添加、移除事件监听,然后触发时间分配线程
少量的Swing方法是安全的,如下:
JTextComponent.setText
JTextArea.insert
JTextArea.append
JTextArea.repalceRange
JComponent.repaint
JComponent.revalidate
记不住的话,还有个基本的,重绘方法是线程安全的,其他的当做不安全使用事件监听触发就可以了,不行就查查源码确定一下
补充1:示例:交替打印
题目来源:https://leetcode.cn/problems/print-foobar-alternately/
1115. 交替打印 FooBar
给你一个类:
class FooBar {
public void foo() {
for (int i = 0; i < n; i++) {
print("foo");
}
}
public void bar() {
for (int i = 0; i < n; i++) {
print("bar");
}
}
}
两个不同的线程将会共用一个 FooBar 实例:
请设计修改程序,以确保 "foobar" 被输出 n 次。
示例 1:
输入:n = 1
输出:"foobar"
解释:这里有两个线程被异步启动。其中一个调用 foo() 方法, 另一个调用 bar() 方法,"foobar" 将被输出一次。
示例 2:
输入:n = 2
输出:"foobarfoobar"
解释:"foobar" 将被输出两次。
提示:
- 1 <= n <= 1000
- 线程 A 将会调用 foo() 方法,而
- 线程 B 将会调用 bar() 方法
以下给出三种解法(都是自己写):
解法一:使用锁+Condition