zoukankan      html  css  js  c++  java
  • 多进程和多线程

    多进程

    我们通常所得操作系统是多任务的OS。这个任务一般指的就是进程,比如:我们听音乐和写文档对于我们来说是同时执行的。那么是如何实现的呢?这主要是操作系统上的时间片,通常时间很短。每个时间片内将CPU分配给某一个任务,时间片结束,CPU将自动回收,再分配给另外任务。从外部看,所有任务是同时在执行。但是在CPU上,任务是按照串行依次运行(单核CPU)。如果是多核,多个进程任务可以并行。但是单个核上,多进程只能串行执行。

    多进程的优缺点

    优点:

    可以同时运行多个任务
    程序因IO堵塞时(例如键盘的输入),可以释放CPU,让CPU为其他程序服务
    当CPU有多个核时,可以为多个程序同时服务

    缺点:

    过于笨重,不好管理。
    进程之前切换代价过大。

    多线程

    概念:一个程序可以包括多个子任务,可串/并行,每个子任务可以称为一个线程。

    多线程在一个子任务发生IO堵塞时可以让cpu切换到另一个子任务,这样cpu知识在一个程序之间进行切换,所消耗的代价较小。例如:你让一个扫地阿姨帮你扫地,但是这个房间锁了,此时你只需要让她扫隔壁的房子就好。如果是进程的切换相当于你让她去扫另一栋楼,这时所消耗的时间就很多了。

    多线程和多进程对比

    – 线程共享数据 – 线程通讯更高效 – 线程更轻量级,更容易切换 – 多个线程更容易管理

    Java中多线程的创建




    public class MutiThread {
    
        public static void main(String[] args) {
           // new Thread1().start();//实例化之后可以直接start
            new Thread(new Thread2()).start();//必须借助中间类Thread进行start
            while(true){
                try {
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    
    /**
     * 实现多线程编程的方式1:继承Thread,重写run方法
     *
     */
    class Thread1 extends Thread{
        @Override
        //线程的代码段,当执行start()时,线程从此出开始执行
        public void run() {
            while(true){
                System.out.println(Thread.currentThread().getName());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * 实现多线程编程的方式1:实现Runnable,实现run方法
     *
     */
    class Thread2 implements Runnable{
    
        @Override
        public void run() {
            while(true){
                System.out.println(Thread.currentThread().getName());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    Java中多线程的启动



    java多线程实现对比




    不一样的烟火
  • 相关阅读:
    Sql语句中IN和exists的区别及应用
    时间戳/Date(1354116249000)/ 转换
    SqlServer不允许更改字段类型(表中已有数据)
    Firefox内存占用过高解决方法
    接口开发中的测试问题
    c# winform 窗体起始位置 设置
    【整理】C#文件操作大全(SamWang)
    C#实现JSON序列化与反序列化
    解决方案资源管理器中跟踪活动项
    C#中方法的参数的四种类型
  • 原文地址:https://www.cnblogs.com/cstdio1/p/12236035.html
Copyright © 2011-2022 走看看