• 【并发与多线程】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。

  • 相关阅读:
    Linux- inode & vnode
    Java 异常处理详解(如果想知道Java中有关异常处理的知识点,那么只看这一篇就足够了!)
    蓝桥杯备赛系列——倒计时50天!
    Git常用方法
    Python企业面试题2 —— 基础篇
    如何设计性能优良的mysql索引?
    怎样理解伦敦金交易的点差
    机器人微控制器编程(CoCube)-破除定势
    Elaticsearch timestamp 与 LocalDateTime 映射
    K8S 实用工具之一 - 如何合并多个 kubeconfig?
  • 原文地址:https://blog.csdn.net/julia_xueli/article/details/125411381