当前位置:嗨网首页>书籍在线阅读

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);
    }
  }
}