欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Thread线程

程序员文章站 2022-05-18 11:15:21
...

Thread

1.重新定义线程类继承线程Thread

继承类代码:

public class MyThread extends Thread {
//重写Thread中的run方法
@Override
public void run() {
    for (int i = 0; i < 200; i++) {
        System.out.println("run"+i);
    }     
}
}

测试类代码:

public class Demo01Thread {
public static void main(String[] args) {
    MyThread mt=new MyThread();
  //  mt.run();//单线程方法,先执行这个方法!
    mt.start();//和下面的竞争使用cpu//Thread-0

    for (int i = 0; i < 1024; i++) {
        System.out.println("main"+i);
    }
}
}

两个线程之间互相竞争

原理图(来源于网上):

Thread线程
run 和 start
Thread线程

2.使用Runnable接口方法

2.1使用接口实现类中重写Runnable接口的实现类对象代码:

public class RunnableImpl implements Runnable {
//* 2.在实现类中重写Runnable接口的实现类对象
@Override
public void run() {
    for (int i = 0; i < 20; i++) {
        System.out.println(Thread.currentThread().getName()+"----->"+i);
    }
}
}

实现类代码:

public class Demo01Runnable {
public static void main(String[] args) {
    //创建一个Runnable接口的实现类对象
    RunnableImpl run = new RunnableImpl();
    //4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
    Thread t1=new Thread(run);
    t1.start();
    //或者直接传入新的实现类对象!
    Thread t2=new Thread(new  RunnableImpl());
    //5.调用Thread类中的start方法,开启新的线程执行run方法*/
    t2.start();
    for (int i = 0; i < 20; i++) {

        System.out.println(Thread.currentThread().getName()+"----->"+i);
    }
}
}

2.2匿名内部类实现Runnable实现类对象

关于匿名内部类:
匿名内部类实现线程的创建

  • 匿名:没有名字

  • 内部类:写在其他类内部的类

  • 匿名内部类的作用:简化代码

  • 把子类继承父类,重写父类方法,创建子类对象合一一步完成

  • 把实现类接口,重写接口中的方法,创建实现类对象合成一步完成

  • 匿名内部类的最终产物:子类/实现类对象,而这个类没有名字

  • 格式

  • new 父类/接口(){重写父类/接口中的方法};
    代码:

      public class Demo01InnerClassThread {
      public static void main(String[] args) {
    
      //接口实现方法
      Runnable r=new Runnable() {
          @Override
          public void run() {
              for (int i = 0; i < 20; i++) {
                  System.out.println(Thread.currentThread().getName()+"---------->"+i);
              }
    
          }
      };
      new Thread(r).start();
      //简化程序
      new Thread(new Runnable() {
          @Override
          public void run() {
              for (int i = 0; i < 20; i++) {
                  System.out.println(Thread.currentThread().getName()+"---------->"+i);
              }
          }
      }).start();
     }
      }
    

getname,setname方法(Mythread为例)

测试类

public class Demo01SetThreadName {
public static void main(String[] args) {
    MyThread t=new MyThread();
    //通过thread中setname()方法,设置线程的名字!
    t.setName("线程之我和我的祖国");
    t.start();
    Thread.currentThread().setName("main主线程");//设置主线程的名称
    System.out.println(Thread.currentThread().getName());
    System.out.println(new Thread("使用构造方法,让父类给新的线程起名称").getName());
}
}
相关标签: Thread 单线程