多线程:

进程:就是正在执行中的程序,每一个进程执行都有一个执行的顺序,该顺序是一个执行路径。或者叫一个控制单元。

线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行

一个进程中至少有一个线程

自定义一个线程:

通过对API的查找,JAVA已经提供了对线程这类事物的描述。就Thread类。

创建线程的第一种方式:继承Thread类。

步骤:1.定义类继承Thread

2.复写Thread类种的run方法

3.调用线程的start方法:作用:启动线程,调用run方法

多线程每次运行都不同,因为多个线程都在获取cpu的执行权,cu执行到谁,谁就运行。在某一时刻,只能有一个程序在运行。(多核除外)。cpu在做快速的切换,以达到看上去是同时运行的效果。可以把多线程的运行看作是互相争夺cpu的执行权。

Threa类用于描述线程:该类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法。

声明实现一个runnable接口。接口中只有一个run方法。 runnable为非thread子类的类提供一种激活方式

步骤:

1.定义类实现runnable接口,

2.覆盖runnable接口中的run方法,将线程要运行的代码存放在该run方法中

3.通过Thread类建立线程对象,将runnable接口的子类对象作为实际参数传递给thread类的构造函数,

4.调用thread类的start方法开启线程变更前调用runnable接口子类的的run方法

实现方式和继承方式有什么区别:避免了单继承的局限性

多线程的运行出现了安全问题:

当多条语句再操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没执行完另一个线程参与进来执行。导致共享数据的错误。

解决办法:对多条操作共享数据的语句,只能让一个线程都执行完在执行过程中其他线程不可以参与执行。JAVA对于多线程的安全问题提供了专业的解决方式,就是同步代码块

synchronized(对象){

需要被同步的代码}

对象如同锁,持有锁的线程可以在同步中执行。没有锁的线程,也不能执行。

同步的前提:

1.必须要有两个或两个以上的线程

2.必须是多个线程使用一个锁

必须保证同步中只有一个执行

函数需要被对象调用,那么函数都有一个所属对象引用,就是this.所有同步函数使用的锁是this。

如果同步函数被静态修饰后,使用的锁是该方法所在类的字节码文件对象,也就是类名.class

线程间通信

多个线程在操作同一个资源,操作的动作不同。

JAVA学习笔记-09的更多相关文章

  1. java学习笔记06--正则表达式

    java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...

  2. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  3. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  4. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  5. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  6. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  7. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  8. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  9. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  10. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

随机推荐

  1. 【KAWAKO】模型的压缩、扩张,计算模型的各种成本

    目录 模型压缩 量化 稀疏化训练 剪枝 知识蒸馏 自蒸馏 集成 使用精细化模型结构 模型扩张 深度 宽度 输入图像的分辨率 深度.宽度.分辨率联合扩张 使用精细化模型结构 计算模型的各种成本 参数量 ...

  2. Mysql基本使用指南

    一. 记录操作 子查询 select * from students where (age, height) = (select max(age), max(height) from students ...

  3. P5491 【模板】二次剩余

    \(\text{Summary}\) 实际上是做法的归纳 一切皆是结论性的,没有证明! 模 \(p\) 意义下的二次剩余有 \(\frac{p-1}2\) 个,二次非剩余也恰有那么多 考虑解关于 \( ...

  4. 【雅礼联考DAY01】数列

    #include<cstdio> #include<map> using namespace std; typedef long long LL; const int N = ...

  5. [EULAR文摘] 超声滑膜炎和腱鞘炎对已获临床缓解患者病情复发的预测

    标签:eular文摘; 超声评估; 病情预测; 腱鞘炎 超声滑膜炎和腱鞘炎对已获临床缓解患者病情复发的预测 Bellis E, et al. EULAR 2015. Present ID:OP0217 ...

  6. 打印出来的数据{ob: observer}、vue 中 [__ob__: Observer]问题

    问题效果: 理想效果: 解决方案:JSON.parse(JSON.stringify( ob )) 首先我们要把这个数据获取原始数据 JSON.stringify([data])   变成字符串 然后 ...

  7. Vue学习笔记之表单绑定

    1. 概述 1.1. 什么是数据的双向绑定 Vue.js是一个MV VM框架, 即数据双向绑定, 即当数据发生变化的时候, 视图也就发生变化, 当视图发生变化的时候,数据也会跟着同步变化.这也算是Vu ...

  8. Python 01-Unittest的使用 unittest简单应用

    class TestCase01(unittest.TestCase):     def setUp(self):         print("用例开始")     def te ...

  9. 面试笔记1-redis

    1.什么是RDB? RDB实际上是Redis的一种数据持久化机制.它每隔一段时间就会把内存中的数据写入到磁盘中的临时文件,作为快照,宕机重启之后,就会把rdb文件读取到内存中去,就可以恢复数据. 2. ...

  10. 安装 deepin linux 系统、linux 使用记录

    安装 deepin 深度linux系统 官网:https://www.deepin.org/zh/ 包含了下载ios镜像和安装教程: 最新版本:https://www.deepin.org/zh/do ...