首页 > 其他分享 >多线程Day01

多线程Day01

时间:2024-09-30 21:00:26浏览次数:6  
标签:run Thread Day01 start 线程 多线程 CPU

多线程

线程、进程、多线程

程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念

进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位

通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位

注意:很多多线程是模拟出来的,真正的多线程是指有多个CPU,如服务器。在一个CPU的情况下,在同一个时间点,CPU只能执行一个代码

在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程、gc线程

在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,先后顺序不能人为干预

对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制

每个线程在自己的工作内存交互,内存控制不当会造成数据不一致

线程创建

继承Thread类

  1. 自定义线程类继承Thread类
  2. 重写run( )方法,编写线程执行体
  3. 创建线程对象,调用start( )方法启动线程

启动线程:子类对象.start( )

不建议使用:避免OOP单继承局限性

package com.dongfangyulv.demo01;

//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程

//总结:线程开启不一定立即执行,由CPU调度执行

public class TestThread1 extends Thread{
    @Override
    public void run() {
        //run方法线程体
        for (int i = 0; i < 20; i++) {
            System.out.println("副线程" + i);
        }
    }

    public static void main(String[] args) {
        //main线程,主线程

        //创建一个线程对象
        TestThread1 testThread1 = new TestThread1();

        //调用start方法开启线程
        testThread1.start();

        for (int i = 0; i < 20; i++) {
            System.out.println("主线程" + i);
        }
    }
}

实现Runnable接口

  1. 定义MyRunnable类实现Runnable接口
  2. 实现run( )方法,编写线程执行体
  3. 创建线程对象,调用start( )方法启动线程

启动线程:传入目标对象+Thread对象.start( )

推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用

实现Callable接口

标签:run,Thread,Day01,start,线程,多线程,CPU
From: https://www.cnblogs.com/dongfangyulv/p/18442436

相关文章

  • redis: 开启io多线程
    一,配置redis.conf[root@webconf]#viredis.conf修改两个参数#Soforinstanceifyouhaveafourcoresboxes,trytouse2or3I/O#threads,ifyouhavea8cores,trytouse6threads.Inorderto#enableI/Othreadsusethefollowingconfigurationdire......
  • 【多线程】多线程(1):概念,创建线程
    【多线程的概念】之前写过的所有代码,都只能使用“一个核心”,此时无论如何优化代码,最多只能用一个cpu核心,把这个核心跑满了,其他核心也是空闲着,通过写特殊的代码,把多个cpu核心都能应用起来,此为“并发编程”之前使用的并发模式为“多进程编程”,其在创建/销毁进程时开销较大,一旦......
  • day01 Markdown学习
    Markdown学习二级标题字体helloworldhellowolrdhelloworld引用选择狂神说java,走上人生巅峰分割线图片超链接点击跳转到我的博客列表abab表格名字性别生日张三男19970101代码public......
  • C#实现多线程的几种方式
    前言多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率。多线程常用场景CPU密集型任务.I/O密集型任务.并发请求处理.大数......
  • 多线程学习
    一.认识线程(Thread)1.线程是什么定义:线程是一个轻量级的执行流,它代表了程序执行的一个路径。每个线程都有自己的程序计数器、栈和局部变量,但线程之间可以共享同一个进程的全局变量和堆。主线程:在Java程序中,main()方法所运行的线程被称为主线程(MainThread)。当你启动......
  • python多线程与线程池
    线程:是任务的执行者。进程:是一个动态的概念。适用情况:IO密集用多线程。CPU密集用多进程。原因:Cpython解释器中使用了GIL全局解释锁,一个进程只有一个锁。只有拿到这个锁的线程才能获取解释器,取解释执行代码。这就导致了即使开了多线程,实际上只有一个线程在执行。因此......
  • C++多线程与并发类面试题
    题目来源:https://subingwen.cn/cpp/thread/https://mp.weixin.qq.com/s?__biz=Mzg4NDQ0OTI4Ng==&mid=2247489580&idx=1&sn=b9ac83040601230ff897f3394e956cea&chksm=cfb95145f8ced8536d5dcfa7d3165e3a51f5cb40e52f699745df0d8f71e4f7591674cd5cf156&token=......
  • day01-elasticstack-all
    一.elasitcstack概述什么是ElasticStack?所谓的ElasticStack别名为elkstack。ELK指的是三个技术栈: -ElasticSearch,简称:es 数据库,应用场景为数据的快速检索。 但凡和搜索框相关的,都会用ES进行数据的查询。 -Logstash: 采集数据,日志聚合,处理数据,将数据写入到ES......
  • Linux多线程复制目录
    比如有一个目录a需要复制:mkdiratoucha/amkdira/btoucha/b/ctreeaa├──a└──b└──c将其复制为目录d只需要用find找出目录下所有的文件,然后用gnu-parallel开多线程逐个复制即可:mkdirdcdafind.-typef|parallel-j4cp--parents{}../dtre......
  • Java多线程
    进程与线程一个程序有一个进程一个进程包含多个线程(必须有一个主线程)查看线程Threadt=Thread.currentThread();//获得当前线程线程创建方式1.继承Thread类,重写run方法,调用start方法2.实现Runnable接口,重写run方法,创建Thread对象newThread(Runnable),调用start方法......