• 【Day21】Java线程(创建线程的两种方法)


    目录

    方式一:继承Thread

    步骤:

    例题1:遍历1-100以内所有偶数

     方式二:实现Runnable接口

    步骤:

    比较创建线程的两种方式 开发中:优先选择:实现Runnable接口的方式 原因:1、实现的方式没有的类的单继承性的局限性      2、实现的方式更适合来处理多个线程有共享数据的情况

    例二:创建三个窗口,总票数为100张

    方式一:继承Thread

    步骤:

    /**
    *多线程的创建,方式一:继承Thread
     * 1、创建一个继承与Thread的子类
     * 2、重写Thread的run()方法------>将线程执行的操作声明在方法内
     * 3、创建Thread类的对象
     * 4、同构此对象调用start();
    * @author: ----千里之行,始于足下----
    * date: 2022/8/11 18:33
    * @since JDK 1.8
    */

    例题1:遍历1-100以内所有偶数

    1. public class Test1 extends Thread{
    2. // 重写Thread的run方法
    3. @Override
    4. public void run() {
    5. for(int i=1;i<=100;i++){
    6. if(i%2==0){
    7. System.out.println(i);
    8. }
    9. }
    10. }
    11. static class Test2 {
    12. public static void main(String[] args) {
    13. Test1 te1 = new Test1();
    14. // start的作用①启动线程,②调用当前线程的run()方法
    15. te1.start();
    16. // 不能直接调用run()方法的方式启动线程
    17. // te.run();
    18. // 如果再次使用start启动线程,会出行异常:IllegalThreadStateException
    19. // te1.start();
    20. // 若想使用多个线程需要新造对象
    21. Test1 te2 = new Test1();
    22. te2.start();
    23. // 如下操作依然在main线程里执行
    24. for (int i = 0; i < 100; i++) {
    25. if (i % 2 != 0) {
    26. System.out.println(i + "***************");
    27. }
    28. }
    29. }
    30. }
    31. }

     方式二:实现Runnable接口

    步骤:

    /**
     *创建多线程的方式二:实现Runnable接口
     * 1、创建一个实现Runnable接口的类
     * 2、实现类去实现Runnable中的抽象方法:run()
     * 3、创建实现类的对象
     * 4、将此对象作为参数传递到Thread类的构造其中,创建Thread类的对象
     * 5、通过Thread类的对象调用start()
     *
     * 联系:public class Thread implements Runnable
     * 相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。
    */
    
    1. class MyThread implements Runnable{
    2. // 重写Runnable的方法
    3. @Override
    4. public void run() {
    5. for (int i = 0; i < 100; i++) {
    6. if(i%2==0){
    7. // Thread.currentThread().getName():表示调用当前方法的线程名
    8. System.out.println(Thread.currentThread().getName()+"--"+i);
    9. }else {
    10. break;
    11. }
    12. }
    13. }
    14. }
    15. public class Test4 {
    16. public static void main(String[] args) {
    17. MyThread myThread=new MyThread();
    18. // t1是线程,创建多线程时,只需要new Thread();就行
    19. Thread t1 =new Thread(myThread);
    20. Thread t2 =new Thread(myThread);
    21. // ①启动线程
    22. // ②调用当前线程的run()-->调用了Runnable类型的target的run()
    23. // ③setName:设置线程名
    24. t1.setName("线程一");
    25. t1.start();
    26. t2.setName("线程二");
    27. t2.start();
    28. }
    29. }

    比较创建线程的两种方式
    开发中:优先选择:实现Runnable接口的方式
    原因:1、实现的方式没有的类的单继承性的局限性
          2、实现的方式更适合来处理多个线程有共享数据的情况
     

    例二:创建三个窗口,总票数为100张

    /**
    * Description:
     *
     *例子:
     *
    * @author: ----千里之行,始于足下----
    * date: 2022/8/11 20:26
    * @since JDK 1.8
    */

    1. class Window extends Thread{
    2. private static int ticket = 100;
    3. @Override
    4. public void run() {
    5. while (true){
    6. if(ticket > 0){
    7. // getName:表示当前线程名,完整写法:this.getName()
    8. System.out.println(getName()+"卖票,票票数还有:"+ticket);
    9. ticket--;
    10. }else {
    11. break;
    12. }
    13. }
    14. }
    15. public static class WindowTest {
    16. public static void main(String[] args) {
    17. Demo1.Window t1 = new Demo1.Window();
    18. Demo1.Window t2 = new Demo1.Window();
    19. Demo1.Window t3 = new Demo1.Window();
    20. t1.setName("窗口一");
    21. t1.start();
    22. t2.setName("窗口二");
    23. t2.start();
    24. t3.setName("窗口三");
    25. t3.start();
    26. }
    27. }
    28. }

     

  • 相关阅读:
    x64dbg 2022 最新版编译方法
    最长公共上升子序列
    iOS 在OC旧项目中使用Swift进行混编
    【Excel】 给证件照换底色
    用友U8与MES、PLM系统的成功对接实例
    分布式架构 服务容器化Docker
    linux特殊权限
    Python 封装SNMP调用接口
    概率论得学习整理--番外3:二项式定理和 二项式系数
    C语言考试题库之填空题
  • 原文地址:https://blog.csdn.net/fool_Java/article/details/126896028