码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【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. }

     

  • 相关阅读:
    handler+message【消息机制】
    高性能图表组件LightningChart .NET v11.0发布——增强DPI感知能力
    Visual Studio 2022 版本 17.4 预览版 3 中对c++编译时优化的内容你都知道吗
    JMeter学习(一)工具简单介绍
    element-ui tree组件实现在线增删改
    https 加密解密过程是什么?
    C#底层库--随机数生成类
    国内近五年人工智能教育的研究热点及趋势——基于多维尺度和社会网络分析的方法
    安装ubuntu、openEuler双系统后,GRUB找不到windows启动选项
    大厂基本功 | MySQL 三大日志 ( binlog、redo log 和 undo log ) 的作用?
  • 原文地址:https://blog.csdn.net/fool_Java/article/details/126896028
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号