• Java多线程与并发——进程与线程


    1.什么是进程

    程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。

    进程是一个具有一定独立功能的程序,一个实体,每一个进程都有它自己的地址空间。

    2.进程的状态

    进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程具有以下三种基本状态。

    1)就绪状态

    2)运行状态

    3)阻塞状态

    3.线程

    线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干程序又可以划分成若干个线程。

    线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个线程(单线程程序)

    4.线程实现的两种方式

    package com.vince;
    /**
     * 进程:一个具有独立内存空间的执行程序
     * 线程:线程是进程中的其中一条执行路径(多条就是多线程),每个进程最少有一个线程
     *     同一个进程中的多个线程共享一个内存空间
     * 实现多线程的两种方式:
     * 1.继承Thread类
     * 2.实现Runnable接口(推荐)
     * @author acer
     *
     */
    public class ThreadDemo {
    
    
        public static void main(String[] args) {
            System.out.println(Thread.currentThread().getName());
            //创建一个线程对象
            MyThread mt=new MyThread();
            mt.setPriority(Thread.MAX_PRIORITY);//设置抢占CPU执行时间的优先级(只是几率大而已)
            mt.setDaemon(true);//将mt设置为守护线程
            //mt.run();//直接调用不是启动线程,而是在本线程中执行方法
            mt.start();//线程已准备就绪,等待cpu的调度
            System.out.println(mt.isAlive());
            
            MyRunnable mr=new MyRunnable();
            Thread t=new Thread(mr);
            t.start();
            System.out.println(t.isAlive());
            
            
            for(int i=1;i<10;i++){
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"--"+i);
                if(i==5){
                    try {
                        mt.join();//等待
                    } catch (InterruptedException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
            }
            
        }
        }
        //继承Thread类实现线程
        static class MyThread extends Thread{
            public void run() {
                // 在此方法中编写线程要执行的工作
                for(int i=1;i<10;i++){
                    try {
                        // 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),
                        //此操作受到系统计时器和调度程序精度和准确性的影响。
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"--"+System.currentTimeMillis()+"--"+i);
                    
                }
                
            }
        }
        //实现Runnable接口实现线程
        static class MyRunnable implements Runnable{
            public void run() {
                // 在此方法中编写线程要执行的工作
                for(int i=1;i<10;i++){
                    try {
                        // 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),
                        //此操作受到系统计时器和调度程序精度和准确性的影响。
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"--"+System.currentTimeMillis()+"--"+i);
                }
            }
        }
    }
  • 相关阅读:
    vue.js3: 使用全局css样式文件(vue@3.2.37)
    vue.js3:多张图片转pdf(jspdf@2.5.1 / vue@3.2.37)
    技术解读:现代化工具链在大规模 C++ 项目中的运用 | 龙蜥技术
    项目环境稳定性指标建设之路
    从趋势到挑战,资深工程师一站式解读:操作系统运维和可观测性
    一文剖析PolarDB HTAP的列存数据压缩
    EasyCV DataHub 提供多领域视觉数据集下载,助力模型生产
    OpenKruise v1.3:新增自定义 Pod Probe 探针能力与大规模集群性能显著提升
    《领域驱动设计》:从领域视角深入仓储(Repository)的设计和实现
    基于IoT全链路实时质量魔洛哥
  • 原文地址:https://www.cnblogs.com/shenhainixin/p/5137565.html
Copyright © 2020-2023  润新知