16-案例实现
案例实现
根据如下步骤实现本案例。
1.创建 Task 类并实现 Runnable 接口:
public class Task implements Runnable {
2.实现 run() 方法:
@Override
public void run() {
3.创建一个100次的循环:
for (int i=0; i<100; i++) {
4.在每次循环中,让线程休眠100ms:
try {
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
5.在控制台打印一条有线程名称和循环次数的信息:
System.out.printf("%s: %d\n",Thread.currentThread()
.getName(),i);
}
}
}
6.实现本案例的主类。创建 Main 并添加 main() 方法:
public class Main {
public static void main(String[] args) throws Exception{
7.创建 Task 对象并将其命名为 task :
Task task = new Task();
8.创建大小为5的 Thread 数组:
Thread threads[] = new Thread[5];
9.创建5个线程,启动并执行前面创建的 Task 对象:
for (int i = 0; i < 5; i++) {
threads[i] = new Thread(task);
threads[i].setPriority(i + 1);
threads[i].start();
}
10.创建一个10次的循环以打印前面运行的线程信息。在循环内部再创建一个5次的循环:
for (int j = 0; j < 10; j++) {
System.out.printf("Main: Logging threads\n");
for (int i = 0; i < threads.length; i++) {
11.在控制台上打印线程的名称、状态、分组和跟踪堆栈的信息:
System.out.printf("**********************\n");
System.out.printf("Main: %d: Id: %d Name: %s: Priority: %d\n",i,
threads[i].getId(),threads[i].getName(),
threads[i].getPriority());
System.out.printf("Main: Status: %s\n",threads[i].getState());
System.out.printf("Main: Thread Group: %s\n",
threads[i].getThreadGroup());
System.out.printf("Main: Stack Trace: \n");
12.用循环打印跟踪堆栈:
for (int t=0; t<threads[i].getStackTrace().length; t++) {
System.out.printf("Main: %s\n",threads[i].getStackTrace()
[t]);
}
System.out.printf("**********************\n");
}
13.让线程休眠1s后,结束循环和类:
TimeUnit.SECONDS.sleep(1);
}
}
}