“你好,士兵!”
“你好,船长!”
“我有一些好消息要告诉你。这里有几道练习题,可以增强你的技能。每天练习练习,你的技能会得到飞速进步。它们是专门针对 IntelliJ IDEA 创建的。”
4
任务
Java 核心, 第 6 级, 课程 13
Thread.currentThread 始终返回当前线程
1.在 printMsg 方法中,将当前线程赋值给变量 t。
2.在 printMsg 方法中,在所有操作后添加 1 毫秒的延时。
4
任务
Java 核心, 第 6 级, 课程 13
连续线程
1.在 run 方法中,在所有操作后添加 10 毫秒的延迟。如果线程已中断,则显示“线程已中断”。
2.让所有线程顺序运行:首先,对于线程 1,从 COUNT 倒数到 1;其次,对于线程 2 - 从 COUNT 倒数到 1,依次类推。
示例:
#1:4
#1:3
...
#1:1
#2:4
...
18
任务
Java 核心, 第 6 级, 课程 13
以递归方式创建线程
1.更改 GenerateThread 类,使其成为线程。
2.创建 GenerateThread 构造方法,此方法必须:
2.1.调用超类的构造方法,以 String 方式传递创建的线程号。使用 createdThreadCount。
2.2.启动当前线程。
2.3.线程号必须从 1 开始。
3.重写 toString 方法:在 GenerateThread 内部,使用 Alt+Insert -> Override Methods。开始键入“toString”。
3.1.toString 方法必须返回当前线程号和“已创建”一词。使用 getName()。
示例:
8 已创建
4.如果创
4
任务
Java 核心, 第 6 级, 课程 13
连续线程
1.弄明白程序的功能。
2.让程序先显示线程的结果,当线程完成时,则 main 方法会继续。
3.示例输出:
在 MyThread 0 内
在 MyThread 1 内
...
在 MyThread 9 内
在 main 0 内
在 main 1 内
...
在 main 9 内
4
任务
Java 核心, 第 6 级, 课程 13
死锁
1.弄明白程序是如何工作的。
2.不更改 T1 和 T2 类,让其线程完成(不一定成功)。
3.不要使用 sleep 方法。
9
任务
Java 核心, 第 6 级, 课程 13
遵循某种模式
弄明白程序是如何工作的。
与 CountdownRunnable 类似,创建一个 CountUpRunnable 线程,以计数的顺序显示值:1 到 number。
18
任务
Java 核心, 第 6 级, 课程 13
我们玩游戏好吗?
三个人玩游戏。每个玩游戏的人(玩家)都有两个参数:姓氏(名字)和每秒的动作(评分)。
显示所采取的动作并确定赢家和输家。
开始吧...
1.弄明白程序的功能。
1.1.List<String> actions 存储每个玩家执行的动作序列(从 0 到最后一个)。
1.2. isWinnerFound 指示赢家已找到。
1.3.sleep 方法抛出 InterruptedException 并带 long 参数。
1.4.玩家每个互相独立地玩游戏。
2.实现 run 方法,以便为每个玩家:
2.1.在 actions 列表中指定的动作以定期间隔 (1000ms/rating) 显示。
18
任务
Java 核心, 第 6 级, 课程 13
早起的鸟儿有虫吃
1.弄明白程序的功能。
1.1.每个线程应从控制台读取几行内容。使用现有的 static BufferedReader reader。
1.2.使用 AtomicInteger readStringCount 计算所有线程从控制台读取多少行内容。
2.实现 run 方法:
2.1.只要线程未中断 (!IsInterrupted),从控制台读取几行内容,然后将其添加到 List<String> result。
2.2.使用 readStringCount 对从控制台读取的字符串计数。
9
任务
Java 核心, 第 6 级, 课程 13
该你了!
1.在 Solution 类中,创建继承 Thread 的 public static Read3Strings 类。
2.在 run 方法中,从控制台读取三行内容。
3.应该在一个线程上连续读取三行内容,然后合并为一个以空格分隔的字符串。
4.在 main 方法中,显示每个线程的结果。
5.使用 join。
示例:
输入:
a
b
c
d
e
f
输出:
a b c
d e f
18
任务
Java 核心, 第 6 级, 课程 13
顺序文件输出
1.弄明白程序的功能。
2.在 static 块中,读取 2 个文件名:firstFileName 和 secondFileName。
3.在 Solution 类的内部,创建 public static ReadFileThread 类,该类实现 ReadFileInterface 接口(想想哪个更适合:Thread 或 Runnable)。
3.1.setFileName 方法必须设置将读取其内容的文件名。
3.2.getFileContents 方法必须返回文件的内容。
3.3.在 run 方法中,读取文件的内容并关闭流。使用空格分隔文件的行。
4.想想你需要在何处等待线程完成,以确保文
“以前的练习题是针对新手的。我为老学员添加了一些更高级的奖励练习题。只为老学员提供哦。”
18
任务
Java 核心, 第 6 级, 课程 13
工厂方法模式
1.仔细看看你所拥有的类。
2.在 common 包的不同文件中,创建 JpgReader、PngReader 和 BmpReader 类,这些类实现 ImageReader 接口。
3.在 main 包的单独文件中,创建包含一个方法的 ImageReaderFactory 类。
3.1.想想它应叫什么?
3.2.想想该方法应具有哪些修饰符。
4.该方法应:
4.1.对于 ImageTypes 中的每个值,返回相应的 Reader。例如,对于 ImageTypes.JPG,返回 JpgReader;
4.2.如果传递了无效参数,则抛出异常:
IllegalArgumentException("
18
任务
Java 核心, 第 6 级, 课程 13
线团
1.创建 5 个与 Thread 不同线程:
1.1.线程 1 必须无限运行;
1.2.线程 2 应在 InterruptedException 发生时显示“InterruptedException”;
1.3.线程 3 应每半秒显示一次“加油”。
1.4.线程 4 必须实现 Message 接口。当调用 showWarning 方法时,线程应停止;
1.5.线程 5 应从控制台读取数字,直到“N”输入为止。然后它应显示输入数字的总和。
2.在 static 块中,将你的线程以指定的顺序添加到 List<Thread> threads。
3.线程不应自动启动。
提示: 线程 4 可
18
任务
Java 核心, 第 6 级, 课程 13
调试一切事物
弄明白程序的功能。
查看 UncaughtExceptionHandler - 很重要。
再仔细看看该程序。
弄明白 OurUncaughtExceptionHandler 为何不工作(使用调试程序)。
修复错误,即一切都应正常工作。:)
预期结果无特定顺序:
线程 1:我的异常消息
线程 2:我的异常消息