Thread线程

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

两个线程之间互相竞争

原理图(来源于网上):

在这里插入图片描述
run 和 start
在这里插入图片描述

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());
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值