• 【并发与多线程】Java多线程程序设计(一)


    预备知识

    应用程序中使用多线程不会增加 CPU 的数据处理能力。只有在
    CPU
    的计算机或者在网络计算体系结构下,将 Java 程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的 Java 虚拟机中,才能提高应用程序的执行效率。

    创建线程的两种方法

    声明一个类的同时实现 Runnable 接口

    run 方法中的代码即线程所要做的事情

    public class MyThread implements Runnable{
        public void run(){
            for (int i = 1; i <= 10; i++) {
                System.out.println("第" + i + "次执行线程"+ Thread.currentThread().getName());
                try {
                    Thread.currentThread().sleep(500);
                }
                catch (InterruptedException e) {
                }
        }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    public class Main {
        public static void main(String args[]) {
            Thread t1 = new Thread(new MyThread(),"thread 1"); // 创建线程1的对象,并
            //通过第二个参数将其命名为thread 1
            Thread t2 = new Thread(new MyThread(),"thread 2"); // 创建线程2的对象,并
            //通过第二个参数将其命名为thread 2
            t1.start(); //启动两个线程运行
            t2.start(); //虽然t2的启动表面上好像在后面,实际上两个线程的执行并无先后之分,
            //t2的执行甚至有可能在t1之前,看系统的调度情况,可以多执行几次
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (我的执行结果:
    第1次执行线程thread 2
    第1次执行线程thread 1
    第2次执行线程thread 2
    第2次执行线程thread 1
    第3次执行线程thread 1
    第3次执行线程thread 2
    第4次执行线程thread 2
    第4次执行线程thread 1
    第5次执行线程thread 2
    第5次执行线程thread 1
    第6次执行线程thread 2
    第6次执行线程thread 1
    第7次执行线程thread 1
    第7次执行线程thread 2
    第8次执行线程thread 2
    第8次执行线程thread 1
    第9次执行线程thread 2
    第9次执行线程thread 1
    第10次执行线程thread 1
    第10次执行线程thread 2)

    若去掉休眠时间:(执行得很快,且实际上是顺序执行的,先全部执行完1,再执行2)
    第1次执行线程thread 1
    第2次执行线程thread 1
    第3次执行线程thread 1
    第4次执行线程thread 1
    第5次执行线程thread 1
    第6次执行线程thread 1
    第7次执行线程thread 1
    第8次执行线程thread 1
    第9次执行线程thread 1
    第10次执行线程thread 1
    第1次执行线程thread 2
    第2次执行线程thread 2
    第3次执行线程thread 2
    第4次执行线程thread 2
    第5次执行线程thread 2
    第6次执行线程thread 2
    第7次执行线程thread 2
    第8次执行线程thread 2
    第9次执行线程thread 2
    第10次执行线程thread 2

    声明一个类为 Thread 的子类,并在子类中重写 Thread 类的run 方法

    run 方法中的代码即线程所要做的事情

    public class MyThread extends Thread{
        public MyThread(){
    
        }
    
        public MyThread(String name){
            super(name);
        }
        public void run(){
            for (int i = 1; i <= 10; i++) {
                System.out.println("第" + i + "次执行线程"+ Thread.currentThread().getName());
                try {
                    Thread.currentThread().sleep(500);
                }
                catch (InterruptedException e) {
                }
        }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    两种方法的区别:一个是implements Runnable ,一是extends Thread。

  • 相关阅读:
    嵌入式单片机及外设(硬件)知识基础二
    飞行器动力学和控制项目(Matlab代码实现)
    文心一言指令:解锁自然语言处理新时代的技术探索
    CSS布局:Flex布局
    [附源码]计算机毕业设计校园生活服务平台Springboot程序
    再探快速排序 → 递进式演进,是否更容易理解?
    提升办公效率,畅享多功能办公笔记软件Notion for Mac
    C# winform DataGridView 常用设置 程序
    [E2E Test] Python Behave Selenium 一文学会自动化测试
    EMQX配置ssl/tls双向认证+EMQX http客户端设备认证(Java实现)_真实业务实践
  • 原文地址:https://blog.csdn.net/julia_xueli/article/details/125411381