J2SE—线程基础知识积累

2024-08-25 16:08

本文主要是介绍J2SE—线程基础知识积累,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      线程是我们视频中很重要的一部分,我们要重点掌握,首先附上一张导图:


       线程是一个程序内部的顺序控制流。

       java的线程是通过java.lang.Thread类实现的。每一个thread对象代表一个新的线程。

       创建线程的方法:1、通过创建Thread类的实例来创建。2、使用实现某一个接口run()。

      当我们在选择创建方法的时候,优先选择实现接口这个方法。因为实现接口比较灵活,我们还可以实现别的接口,或者继承别的类。但是如果使用继承的方法,那就比较死了。(能使用接口就不要从thread类继承)。

       提到线程,大家都会想到进程。其实进程是一个静态的概念,例如机器上的一个class文件,或者一个exe文件都叫做进程。而机器实际运行的事线程。机器同时在执行多个线程,也支持执行多个进程。在同一个时间点上,一个cpu只有一个线程在运行。只不过速度快,看着像多线程。(双核双cpu是多线程,doc窗口只支持单进程)。


      线程状态转换图:



      当线程被new出来的时候,只是内存中的一个对象。当你调用它的start方法的时候,变为就绪状态,排队。然后cpu进行调度,线程变为运行状态,如果时间片到头了,继续就绪排队,执行完了之后终止。如果在执行中遇到什么事了,必须得等这个情况解决之后继续运行为阻塞状态。


       接下来是我们的重头戏了:线程的方法!

       1、  sleep方法:线程睡眠


       表示的是让这个线程先睡眠一段规定的时间,让出cpu。


       2、  join方法:线程合并


       表示当前线程邀请调用方法的线程优先执行,在调用方法的线程执行结束之前,当前线程不能再次执行。


       3、  yield方法:让出cpu,给其他线程执行的机会



        4、synchronized:给线程上锁

       线程中最棘手的是线程同步问题。解决这个问题就是要给线程上锁。锁定指的是锁定当前的对象


       锁定的写法:

      1、synchronized(this){

           要加锁的内容

            }

       2、publicsynchronized void add(String name){

            要锁的内容

            }

        但是当我们锁定的粒度变小时,会出现死锁的现象。

        死锁:在线程执行过程中,锁定了一个对象,但是这个线程需要两个对象完成,但是第二个对象被另一个锁锁住了,正在等这个对象,所以两个进程都不能继续执行。

        为了防止死锁,不要给两个对象都加锁,加粗锁的粒度。

 

       5、  wait方法:在发生阻塞事件的时候用。当里面已经满了,只能wait。

               wait和sleep方法的不同:wait时,别的线程可以访问锁定的对象。

                                                       Sleep时,别的线程也不可以访问锁定的对象。


       6、  notify方法:叫醒正在wait的对象。但是碱性之后如果还是处于阻塞状态,则继续wait。


       总结:线程这一章是我们的重点。现在只是从理论和小例子上理解了一点皮毛,更多的需要我们不断的实践去更深刻的理解。Fighting~

这篇关于J2SE—线程基础知识积累的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106013

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

java线程深度解析(六)——线程池技术

http://blog.csdn.net/Daybreak1209/article/details/51382604 一种最为简单的线程创建和回收的方法: [html]  view plain copy new Thread(new Runnable(){                @Override               public voi

java线程深度解析(五)——并发模型(生产者-消费者)

http://blog.csdn.net/Daybreak1209/article/details/51378055 三、生产者-消费者模式     在经典的多线程模式中,生产者-消费者为多线程间协作提供了良好的解决方案。基本原理是两类线程,即若干个生产者和若干个消费者,生产者负责提交用户请求任务(到内存缓冲区),消费者线程负责处理任务(从内存缓冲区中取任务进行处理),两类线程之

java线程深度解析(四)——并发模型(Master-Worker)

http://blog.csdn.net/daybreak1209/article/details/51372929 二、Master-worker ——分而治之      Master-worker常用的并行模式之一,核心思想是由两个进程协作工作,master负责接收和分配任务,worker负责处理任务,并把处理结果返回给Master进程,由Master进行汇总,返回给客

java线程深度解析(二)——线程互斥技术与线程间通信

http://blog.csdn.net/daybreak1209/article/details/51307679      在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制和多线程间通信的实例。 一、再现多线程下安全问题 先看开启两条线程,分别按序打印字符串的

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu