线程

  1. Thread 和 Runnable 的执行顺序?
  1. public class Explorer3 {
  2. public static void main(String[] args) {
  3. Runnable r = new Runnable() {
  4. public void run() {
  5. System.out.print("Cat");
  6. }
  7. };
  8. Thread t = new Thread(r) {
  9. public void run() {
  10. System.out.print("Dog");
  11. }
  12. };
  13. t.start();
  14. }
  15. }

答:thread的run方法源码为,

  1. private Runnable target;
  2. @Override
  3. public void run() {
  4. if (target != null) {
  5. target.run();
  6. }
  7. }

重写Thread的run方法后不会再调永Runnable的方法,所以打印了Dog

  1. 继承Thread并实现Runnable能创建线程么?
  1. public class TR extends Thread implements Runnable {
  2. @Override
  3. public void run() {
  4. System.out.println("执行线程");
  5. }
  6. public static void main(String[] args) {
  7. Thread thread = new Thread(new TR());
  8. thread.start();
  9. }
  10. }

没有影响,Thread本身就实现了 Runnable,并通过聚合和策略模式使用Runnable种的run方法,代码可以正常执行。

  1. 创建三个线程,依次打印“a”,”l”,”i”?