Java学习--多线程(1)

1.启用多线程两种方式的区别

(1)继承Thread:由于子类重写了Thread类的run(),当调用start()时,直接找子类的run()方法。

(2)实现Runnable :构造函数中传入了Runable的引用,成员变量记住了他,start()调用run()方法时内部判断成员变量Runnable的引用是否为空,不为空的时候,编译时看到是Runnable的run(),运行时看的是子类的run()方法。

2.继承Thread和实现Runnable接口的优缺点:

(1)继承Thread

优点:可以直接使用Thread类中的方法,代码简单。

缺点:如果已经有了父类,就不能使用该方法。

(2)实现Runnable接口

优点:即使自己定义的线程类有了父类也没有关系,因为有了父类也可以实现接口,而且接口是可以多实现的。

缺点:不能直接使用Thread中的方法,需要先获取到线程对象后,才能得到Thread的方法,代码复杂。

3.匿名内部类实现线程的两种方式

(1)继承Thread

    new Thread(){

      public void run()

      {

      }

    }.start();

(2)实现Runnable接口

    new Thread(new Runnable(){

      public void run()

      {

      }

    }).start();

 4.获取设置多线程的名字

(1)通过getName()方法获取对象的名字

(2)设置名字:通过构造函数可以传入String类型的名字

    通过setName(String)方法可以设置线程的名字

5.获取当前线程

 (1) Thread.currentThread()

 (2) 使用

   new Thread(new Runnable(){

      public void run()

      {

        //获取当前正在执行的线程

        System.out.println(Thread.currentThread().getName());

      }

    }).start();

6.休眠线程 

Thread.sleep()

7.setDaemon(bool)守护线程

  (1)设置一个线程为守护线程,该线程不会单独执行,当其他非守护线程执行结束后,自动退出。如象棋中,如果将军死了,其他棋子都会随之死亡

  (2)传入true为守护线程

8.join(int)加入线程 

  (1) 当前线程暂停,等待指定的线程执行结束后,当前线程再继续

9.Thread.yield()礼让线程

  (1) 让出cpu,另一条线程执行

10.设置线程优先级

  setPriority()设置线程的优先级

原文地址:https://www.cnblogs.com/jinjingBlog/p/11794541.html