Java并发编程学习笔记(一)线程的入门与创建

这篇具有很好参考价值的文章主要介绍了Java并发编程学习笔记(一)线程的入门与创建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、进程与线程

认识

  • 程序由指令和数据组成,简单来说,进程可以视为程序的一个实例
    • 大部分程序可以同时运行多个实例进程,例如记事本、画图、浏览器等
    • 少部分程序只能同时运行一个实例进程,例如QQ音乐、网易云音乐等
  • 一个进程可以分为多个线程,线程为最小调度单位,进程则是作为资源分配的最小单位
    • 在Windows中进程是不活动的,只是作为线程的容器

对比

  • 进程之间基本相互独立,而线程存在于进程内,是进程的一个子集
  • 进程拥有的资源供其内部的线程共享
  • 进程间通信较为复杂
    • 同一台计算机的进程通信称为IPC
    • 不同计算机之间的进程通信需要通过网络,遵守共同的协议,例如HTTP
  • 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低

二、概念总览

并行与并发

  • 同一时刻同时发生,即为并行
  • 同一时段同时发生,即为并发

同步与异步

  • 需要等待结果返回,才能继续运行就是同步
  • 不需要等待结果返回,自顾自地运行就是异步

三、创建和运行线程

  • 方法一:直接使用Thread
	@Test
    public void test1(){
    	//创建一个新线程
        Thread thread1=new Thread("t1"){
        	//设置线程的具体任务
            public void run(){
                log.info("success");
            }
        };
        //启动线程
        thread1.start();
        log.info("error");
    }
  • 方法二:使用Runnable配合Thread

用这种方式将线程Thread和任务Runnable分开,更容易组件化操作文章来源地址https://www.toymoban.com/news/detail-604941.html

	@Test
    public void test2(){
        Runnable runnable=new Runnable() {
            @Override
            public void run() {
                log.info("success");
            }
        };
        //创建新线程并命名
        Thread thread2=new Thread(runnable,"t2");
        thread2.start();
        log.info("error");
    }
  • 方法三:使用FutureTask配合Thread
	@Test
    public void test4() throws ExecutionException, InterruptedException {
        FutureTask<Integer> futureTask=new FutureTask<>(new Callable<Integer>() {
        	//使用Callable还有一个好处就是能够返回值,而Runnable不行
            @Override
            public Integer call() throws Exception {
                log.info("success");
                Thread.sleep(1000);
                return 100;
            }
        });
        Thread thread4=new Thread(futureTask,"t4");
        thread4.start();
		//捕获到线程执行完成并获取返回值进行后续处理
        Integer result=futureTask.get();
        log.info("error:{}",result);
    }

四、查看进程线程的方法

Windows

  • 可以通过任务管理器来看
  • tasklist:查看进程
  • taskkill:杀死进程

Linux

  • ps -ef 查看所有进程
  • ps -ef | grep java :查询带Java的进程
  • kill 杀死进程,kill -9 强制杀死进程
  • top 进程排名

Java

  • jps:查看所有Java进程
  • jconsole:查看某个Java进程中线程的运行情况(图形界面),具体操作步骤如下
    Java并发编程学习笔记(一)线程的入门与创建,Java并发,java,学习,笔记

五、线程运行的原理

栈与栈帧

  • 每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
    Java并发编程学习笔记(一)线程的入门与创建,Java并发,java,学习,笔记

上下文切换

  • 由一个线程切换到另一个线程即上下文切换,通俗来说,也就是要把线程运行的环境换一下,换成线程之前运行时的环境
  • 专业一点就是,每次线程切换时,操作系统会保存当前线程的状态,并恢复另一个线程的状态
  • 状态包括程序计数器、栈帧中的信息,如局部变量、操作数栈、返回地址等

到了这里,关于Java并发编程学习笔记(一)线程的入门与创建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • JUC并发编程学习笔记(一)认知进程和线程

    进程 一个程序,如QQ.exe,是程序的集合 一个进程往往可以包含多个线程,至少包含一个 java默认有两个线程,GC垃圾回收线程和Main线程 线程:一个进程中的各个功能 java无法真正的开启线程,因为java是运行在虚拟机上的,所以只能通过C++,通过native本地方法调用C++开启线程

    2024年02月06日
    浏览(47)
  • Java并发编程面试题——线程池

    Java并发编程面试题——线程池

    参考文章: 《Java 并发编程的艺术》 7000 字 + 24 张图带你彻底弄懂线程池 (1) 线程池 (ThreadPool) 是一种用于 管理和复用线程的机制 ,它是在程序启动时就预先创建一定数量的线程,将这些线程放入一个池中,并对它们进行有效的管理和复用,从而在需要执行任务时,可以从

    2024年02月07日
    浏览(16)
  • Java并发编程之线程池详解

    Java并发编程之线程池详解

    目录 🐳今日良言:不悲伤 不彷徨 有风听风 有雨看雨 🐇一、简介 🐇二、相关代码 🐼1.线程池代码 🐼2.自定义实现线程池 🐇三、ThreadPoolExecutor类 首先来介绍一下什么是线程池,线程池是一种利用池化技术思想来实现的线程管理技术,主要是为了复用线程、便利地管理线程

    2024年02月12日
    浏览(12)
  • 【Java 并发编程】Java 线程本地变量 ThreadLocal 详解

    【Java 并发编程】Java 线程本地变量 ThreadLocal 详解

    先一起看一下 ThreadLocal 类的官方解释: 用大白话翻译过来,大体的意思是: ThreadLoal 提供给了 线程局部变量 。同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意: 因为每个 Thread 内有自己的实例副本,且 该副本只能由当前 Thread 使用 。

    2024年02月04日
    浏览(13)
  • 【Java 并发编程】一文读懂线程、协程、守护线程

    【Java 并发编程】一文读懂线程、协程、守护线程

    在 Java 线程的生命周期一文中提到了 就绪状态的线程在获得 CPU 时间片后变为运行中状态 ,否则就会在 可运行状态 或者 阻塞状态 ,那么系统是如何分配线程时间片以及实现线程的调度的呢?下面我们就来讲讲线程的调度策略。 线程调度是指系统为线程分配 CPU 执行时间片

    2023年04月08日
    浏览(15)
  • Java面试_并发编程_线程基础

    Java面试_并发编程_线程基础

    进程是正在运行程序的实例, 进程中包含了线程, 每个线程执行不同的任务 不同的进程使用不同的内存空间, 在当前进程下的所有线程可以共享内存空间 线程更轻量, 线程上下文切换成本一般上要比进程上下文切换低(上下文切换指的是从一个线程切换到另一个线程) 并发是单个

    2024年02月07日
    浏览(16)
  • 【Java并发编程】变量的线程安全分析

    【Java并发编程】变量的线程安全分析

    1.成员变量和静态变量是否线程安全? 如果他们没有共享,则线程安全 如果被共享: 只有读操作,则线程安全 有写操作,则这段代码是临界区,需要考虑线程安全 2.局部变量是否线程安全 局部变量是线程安全的 当局部变量引用的对象则未必 如果给i对象没有逃离方法的作用

    2024年02月08日
    浏览(34)
  • java并发编程:多线程基础知识介绍

    最初的计算机只能接受一些特定的指令,用户每输入一个指令,计算机就做出一个操作。当用户在思考或者输入时,计算机就在等待。这样效率非常低下,在很多时候,计算机都处在等待状态。 后来有了 批处理操作系统 ,把一系列需要操作的指令写下来,形成一个清单,一次

    2024年02月07日
    浏览(12)
  • 【Java并发编程】线程中断机制(辅以常见案例)

    本文由浅入深介绍了中断机制、中断的常见案例和使用场景。 因为一些原因需要取消原本正在执行的线程。我们举几个栗子: 假设踢足球点球时,A队前4轮中了4个球,B队前4轮只中了2个球,此时胜负已分,第5轮这个点球就不用踢了,此时需要停止A队的线程和B队的线程(共

    2024年02月13日
    浏览(14)
  • Java并发(三)----创建线程的三种方式及查看进程线程

    Java并发(三)----创建线程的三种方式及查看进程线程

    例如: 输出 注意:这里通过 @Slf4j 注解打印的日志 把【线程】和【任务】(要执行的代码)分开 Thread 代表线程 Runnable 可运行的任务(线程要执行的代码) 例如: 输出 Java 8 以后可以使用 lambda 精简代码 小结 方法1 是把线程和任务合并在了一起,方法2 是把线程和任务分开

    2023年04月24日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包