栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

并发编程(java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

并发编程(java)

并发编程
  • 概念
    • 程序
    • 进程
    • 线程
    • 多线程
  • 并发与并行
    • 并行
  • 并发
  • 进程和线程的区别
    • 区别1
    • 区别2
    • 区别3
    • 区别4
    • 多线程的优点
  • java程序中的线程
  • 创建多线程
    • 继承Thread类,重写run方法
      • 步骤
      • start()
      • run()
    • 实现Runnable接口,重写run方法
      • 步骤
    • 匿名内部类

感谢
参考了唐浩荣
唐浩荣: https://www.cnblogs.com/tanghaorong

概念 程序

一组计算机能识别和执行的静态代码,静态对象。

进程

是指一个内存中运行的应用程序
一个进程中可以包含多个线程

线程

一个进程可以由多个线程组成,多个线程可以共享一个进程的内存空间。

多线程

一个进程在运行时产生了多个线程,这些线程同时运行或交替运行

多线程的作用是提高程序的效率

并发与并行 并行

多个处理器或者是多核的处理器同时处理多个不同的任务.

并发

一个处理器同时处理多个任务。
(我们要了解的是并发编程)

进程和线程的区别

参考了仇实

区别1

进程:进程是系统资源分配的最小单位
线程:线程是cpu操作和调度的最小单位

区别2

线程的创建成本远远低于进程
所以开发多任务运行的时候,通常考虑创建多线程,而不是创建多进程

区别3

进程中的线程共享地址空间,进程间的通信的代价远大于线程间的通信
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

区别4

进程:进程作为资源分配的单位,系统在运行时会为每个进程分配独立的内存空间。所以进程中的数据存放空间是独立的(堆空间和方法区内存)
(进程与进程之间是独立的)

线程:在同一个进程中的线程有共享的和独有的资源
线程之间独有的资源有栈区,TLS
线程共享的资源 代码区 数据区 堆区 栈区 动态链接库 文件
(线程与线程之间内存和资源多是共享的,但是也有独立的如栈)

多线程的优点

1.提高程序的响应
2.最大限度的利用CPU的空闲时间来处理其他任务。
3.提高程序的效率。注意:它不是提高运行速度,而是提高CPU的使用率,从而使程序的运行效率加快了。
3.创建线程的代价则小的多,多任务并发时,多线程效率高。

java程序中的线程

Java 运行时至少会启动两个线程,每当Java执行一个类时,都会启动一个JVM,并且加载对应的class文件,而每一个JVM在操作系统中启动了一个main()方法的主线程,Java 本身具备了垃圾的收集机制,所以在 Java 运行时至少会启动两个线程。

  • 主线程main()
  • 垃圾回收机制线程
创建多线程

创建多线程的三种方法

继承Thread类,重写run方法 步骤
  • 创建继承Thread类的子类
  • 重写Thread类的run()方
  • 创建Thread类的子类对象
  • 通过子类对象调用start()方法
public class Thread1 extends Thread{//继承Thread类
    public void run() {//重写run方法 
        for(int i=1;i<=10;i++)
        {
            System.out.println(i);
            if(i%2==0) {
                try {
                    sleep(3000);//每执行一次程序休眠三秒
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args) {
        Thread1 t1=new Thread1();//创建了两个线程类的子类对象
        Thread1 t2=new Thread1();
        t1.start();// 开启线程用start()方法
        t2.start();//开启了这两个线程,多线程
    }
}

上面创建了两个线程,而这两个线程是交替进行的
Java的线程调度策略是优先级抢占式调度,首先让优先级高的线程大概率能够使用CPU资源,如果线程的优先级相同,那么CPU会随机调度(线程随机性),上面的代码都是默认的优先级,创建的两个线程同时在抢占CPU的资源,那么谁能抢占到的CPU资源就执行。

start()

start()启动线程

run()

封装被线程执行的代码

实现Runnable接口,重写run方法 步骤
  • 创建一个实现Runnable接口的类
  • 实现类去实现Runnable接口中的抽象方法run()
  • 创建实现类的对象
  • 创建一个Thread类,将实现类的对象传入到Thread类的构造器中
  • 通过Thread类的对象调用start()方法
public class Thread2 implements Runnable{//实现Runnable接口中run方法

    @Override
    public void run() {//实现了run方法
        // TODO Auto-generated method stub
        
    }
public class Demo {
    public static void main(String[] args) {
        //创建实现类对象
        Thread2 a = new Thread2();
        //创建一个Thread类,将实现类的对象传入到Thread类的构造器中。
        Thread a1 = new Thread(a);
        Thread a2 = new Thread(a);
        //5、通过Thread类的对象调用start()方法。
        a1.start();
        a2.start();
    }

}
匿名内部类

参考唐浩荣

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号