入门

Thread类

构造方法

  • public Thread():分配一个新的线程对象。
  • public Thread(String name):分配一个指定名字的新的线程对象。
  • public Thread(Runnable target):分配一个带有指定目标新的线程对象。
  • public Thread(String name, Runnable target):分配一个带有指定目标新的线程对象并指定名字。

    常用方法

  • public string getName():获取当前线程名称。

  • public void start():导致此线程开始执行;Java虚拟机调用此线程的run方法。
  • public void run():此线程要执行的任务在此处定义代码。
  • public static void sleep(long millis):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
  • public static Thread currentThread():返回对当前正在执行的线程对象的引用。

创建多线程

1.创建Thread子类,重写run方法

  1. /**
  2. * 创建Thread的子类,重写run方法,设置线程任务
  3. */
  4. public class MyThead extends Thread{
  5. @Override
  6. public void run() {
  7. for (int i = 0; i < 100; i++) {
  8. System.out.println("run:"+i);
  9. }
  10. }
  11. }
  1. /**
  2. * 调用Thread类中的方法start方法,开启新的线程,执行run方法
  3. */
  4. public class ThreadDemo {
  5. public static void main(String[] args) {
  6. MyThead mt = new MyThead();
  7. mt.start();
  8. for (int i = 0; i < 100; i++) {
  9. System.out.println("main:"+i);
  10. }
  11. }
  12. }

2.实现Runnable接口类,实现run方法

  1. //1.创建一个Runnable接口的实现类
  2. public class RunnableImpl implements Runnable {
  3. //2.在实现类中重写Runnable接口的run方法,设置线程任务
  4. @Override
  5. public void run() {
  6. System.out.println("running...");
  7. }
  8. }
  9. public class ThreadDemo {
  10. public static void main(String[] args) {
  11. //3.创建一个Runnable接口的实现类对象
  12. RunnableImpl run = new RunnableImpl();
  13. //4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
  14. Thread thread = new Thread(run);
  15. //5.调用Thread类中的start方法,开启新的线程执行run方法
  16. thread.start();
  17. }
  18. }

使用Runnable接口创建多线程程序的好处

  • 避免单继承的局限性
  • 增强了程序的扩展性,减低程序耦合性(解耦)
    • 把设置线程任务和开启新线程进行分离

      使用匿名内部类实现线程创建

      ```java //创建子类实现多线程 new Thread() { @Override public void run() { System.out.println(getName()); } }.start();

//实现接口实现多线程 new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }).start();

  1. <a name="r7v35"></a>
  2. ## 获取线程名称
  3. - Thread的getName方法,获取当前线程名称
  4. - `Thread.currentThread().getName()`得到当前的Thread对象,然后再调用getName方法
  5. <a name="3xSPg"></a>
  6. ## 设置线程名称
  7. - Thread的setName方法
  8. ```java
  9. MyThread thread1 = new MyThread();
  10. thread1.setName("new name");
  11. thread1.start();
  • 使用Thread的构造方法
    1. //先写一个无参构造方法
    2. public MyThead(){}
    3. //把线程名称传递给父类,让父类(Thread)给子线程起一个名字
    4. public MyThead(String name){
    5. super(name);
    6. }
    7. MyThread mt = new MyThread("new name");