多线程:

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

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

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

自定义一个线程:

通过对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. Git常用指令集合🔥

    关联文章:Git入门图文教程(1.5W字40图)--深入浅出.图文并茂 指令-查看状态信息 指令 描述 git --version 查看git版本 git status 查看本地仓库状态,比较常用的指 ...

  2. playwright 实现高亮、is_visible 等源码修改

    一. 前言 高亮是什么? 在ui自动化中可以执行js来让某个页面元素高亮,比如背景颜色.字体颜色.边框颜色等发生改变,以此更加方便执行的时候点了哪一步操作.(如果有不清楚怎么实现的可以转到我的介绍se ...

  3. 最大K段和

    题目大意 有一个长度为 \(N\) 的序列 \(A\) .他希望从中选出不超过 \(K\) 个连续子段,满足它们两两不相交,求总和的最大值(可以一段也不选,答案为 \(0\)). 分析 很容易想到 \ ...

  4. axSpA患者新发炎症更容易发生在既往发生过炎症的区域

    axSpA患者新发炎症更容易发生在既往发生过炎症的区域 EULAR2015; PresentID: SAT0240 NEW INFLAMMATORY LESIONS IN AXIAL SPONDYLO ...

  5. 使用 UnoCSS shortcuts 简化 class

    UnoCSS 确实简化了不少样式书写.也降低了 CSS 打包体积,提升了样式使用率.但样式太多的话,class 也写得多,比较费眼.所幸,UnoCSS 提供了 shortcuts 来简化 class, ...

  6. MapboxGL基础

    1. 概述 Mapbox GL 是一套开源库,用于在 Web.移动和桌面应用程序中嵌入可自定义且响应迅速的客户端地图.Mapbox GL 贴图以高帧速率呈现.缩写"GL"来自行业标 ...

  7. 一个ASP中的Base64加密 解密函数代码

    <% OPTION EXPLICIT const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu ...

  8. idea连接数据库,驱动问题

    选本地maven仓库的jar包就好

  9. 桌面应用(.exe)设置窗口默认最大化、全屏(electron)

    设置窗口默认最大化.全屏(electron) 一.默认最大化 win = new BrowserWindow({show: false}) win.maximize() win.show() 二.默认 ...

  10. N63050 第三周运维作业

    五.文本处理工具和正则表达式1.基本正则表达式(53分钟)2.基本正则表达式和扩展正则表达式(50分钟)3.文本处理三剑客之grep(43分钟)4.shell脚本编程基础知识(14分钟)5.shell ...