------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

进程 正在进行中的程序 每一个进程都有执行顺序,该顺序是一个执行路径,或者叫控制单元
线程 进程中的一个独立的控制单元,进程至少有一个线程 线程控制着进程的执行
多线程 一个进程中包含不止一个线程 比如玩英雄联盟,这是一个进程。其中包括打野线程和观察线上战况的线程。一边打野,一边观察线上的战况,此时大脑就是CPU,在打野和观察上频繁切换。
多线程一般用于执行循环结构;
jvm 进程java.exe 该进程中至少有一个主线程,并且该线程运行的代码存放在主函数中
Thread类 线程类 调用电脑系统方法创建线程
方法:run 新线程所要执行的代码,用来给子类复写
方法:getName 获取线程名称
方法:static Thread currentThread 返回当前线程(对象),静态的可直接类名调用
创建新线程方式1 第一步,创建类继承Thread 注意Thread的类中的方法和构造函数
第二步,类的构造方法,调取父类方法(可以自定义线程名称) 自定义线程名称,有默认的Thread-0、Thread-1…
第三步,复写Thread的run方法 run方法中,写入需要新线程执行的代码
创建该类的对象 创建新线程
对象名.start(); 执行新线程中的run方法
如果直接使用对象名.run();那么执行该方法的就不是新线程
创建新线程方式2 第一步,创建一个实现Runnable接口的类 如:class Demo extends Runnable
第二步,类中复写Runnable中的抽象方法 public void run()
Runnable中只有一个方法
第三步,新建一个该类对象 如:Demo d=new Demo()
第四步,新建一个线程类对象,将该类对象作为参数传给线程类的构造函数 如:Thread t=new Thread(d,name)
启动线程,调用run方法 如:t.start();
可用匿名内部类来写 Thread t=newThread(newRunnable()
  {
   privateint cola=50;
   publicvoid run()
   {
    //复写run方法的代码
   }
  },"线程1");
方式2优点1: 避免了java单继承的局限性,在实现Runnable的同时还可以继承其他类,
方式2优点2: 避免了创建静态变量,在继承方式中,由于线程对象不同,要使多个线程共享一个变量,就需要将该变量设置为static。但是在方式2中,由于是将实现Runnable类的同一个对象以参数形式传递给Thread的构造函数,因此不需要设置静态变量
多线程特性 随机性 多线程执行次序具有随机性,哪个线程抢到CPU执行权,谁执行,CPU在做着频繁切换,看起来似乎同时运行
多线程安全性 产生原因:多线程的随机性 当多个线程执行同一个方法,并且多个线程均使用到了该方法体中的共享数据时,如果此时方法体中不止一句代码,那么就有可能出现安全问题。比如if语句对共享数据判断,线程A判断满足后,执行权被B抢走,此时线程B判断时,仍然是满足。但是其实A如果正常执行完if语句中的代码,B再判断已经不满足了。此时就出现了安全问题
sleep方法 属于Thread类 public static sleep(long millis)throws InterruptedException
同步 前提 存在安全问题;操作共享数据的多个线程使用同一个锁
弊端 消耗资源
同步代码块
synchronized(任意非匿名对象)
哪些代码需要同步,看哪些代码操作了共享数据,再将这些代码写入同步代码块中
如果锁是匿名对象,当锁住后,匿名对象就变成垃圾了,那么每次进来,都是产生一个新的匿名对象,根本无法锁住(比如房间的锁,假设锁上后锁就自动消失了,这样的锁当然没用处了)
同步函数,在函数上加上synchronized修饰 函数内必须是全部操作共享数据的代码,如果还有其他代码,那么需要将需要同步的代码抽离出来,定义为另一个同步函数,再在该函数相应的地方,调用同步函数即可
找到需要同步的代码 1,找到多线程运行的代码。
2,明确这些代码的共享数据有哪些
3,明确多线程的代码中,有哪些是操作了共享数据的
synchronized(锁) 锁一般情况下是一个对象;
同步代码块的锁可是是任意一个非匿名对象;
同步函数的锁是本类对象,即this;
静态同步函数的锁是本类的class文件,即类名.class
死锁 同步嵌套并且使用的不是同一个锁 线程1拿到锁A,想要进锁B的时候,线程2刚好拿到锁B,想要进到锁A,导致程序卡死
需尽量避免死锁 面试时可能会考死锁

黑马程序员-day10-多线程上部分相关推荐

  1. 黑马程序员_Java_多线程

    线程的理解 1.同一个应用中,多个任务同时进行.就像editplus编辑工具,打开一个文件窗口就是一个线程. 2.线程可以有多个,但cpu每时每刻只做一件事(多核除外).由于cpu处理速度很快,我们就 ...

  2. 黑马程序员—C#多线程

    ----------------------Windows Phone 7手机开发..Net培训.期待与您交流! ---------------------- 通过几天的学习,对多线程有了初步的了解, ...

  3. 黑马程序员5 多线程

    ------- android培训.java培训.期待与您交流! ---------- 创建线程的第一种方式:继承Thread类. 步骤: 1,定义类继承Thread. 2,复写Thread类中的ru ...

  4. 黑马程序员——Java 多线程

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Java 多线程 1.多线程概述 多线程概述 进程: 正在运行的程序,是系统进行资源分配和调用的 ...

  5. [置顶] 黑马程序员 -- 多线程

    黑马程序员 -- 多线程 polk601001 星期五, 15/06/2012 - 17:14 发布 什么是多线程? 多线程就是使程序并发(同时)执行几个操作. .NET 框架类库在System.Th ...

  6. 黑马程序员_java高级篇网络编程TCP实战Day8(上)

    ---------------------ASP.Net+Android+IOS开发.Net培训.期待与您交流! ----------- 黑马程序员_java高级篇网络编程TCP实战Day8(上) ( ...

  7. 黑马程序员—总结过去的一年!站在学生时代的尾巴上!

    文章来源:黑马程序员,黑马论坛 Enjoy life,Enjoy coding,Avoid the chance to regret forever!                          ...

  8. Visual Studio 2022版本 B站黑马程序员C++自学分享-第一阶段(主要包括:自己敲的代码、通过注释来备注上自己对代码的理解)

    Visual Studio 2022版本 B站黑马程序员C++自学分享-第一阶段(主要包括:自己敲的代码.通过注释来备注上自己对代码的理解) 前言 一.第一阶段 C++基础语法入门 对C++有初步了解 ...

  9. Visual Studio 2022版本 B站黑马程序员C++自学分享-第三阶段(1)(主要包括:自己敲的代码、通过注释来备注上自己对代码的理解)

    Visual Studio 2022版本 B站黑马程序员C++自学分享-第三阶段(1)(主要包括:自己敲的代码.通过注释来备注上自己对代码的理解) 前言 三.第三阶段 C++提高编程 介绍C++泛型编 ...

最新文章

  1. UML作业第一次:UML用例图绘制
  2. 计算机网络第二章-物理层
  3. 浅谈如何防范电池事故
  4. find a group of people who want to do similar things with you
  5. 浅析GitLab Flow的十一个规则
  6. 微信小程序源码1000套
  7. 对集成电路的认识以及集成电路的重要性
  8. 软考和华为证书的含金量,哪个更适合找工作
  9. 职业规划(一)怎么写简历
  10. GCC编译器下C语言不定长参数宏##__VA_ARGS__和__VA_ARGS__的使用
  11. JS逆向 2021-8-16 网易云音乐 params、encSecKey参数
  12. java打印日志的几种方式
  13. 几种常见的提取关键词的算法(4)
  14. 乐高大颗粒作品15:移动篮球框
  15. java并发编程学习三——wait/notify与park/unpark
  16. 魔改Win11 系统焕然一新,颜值和性能飙升
  17. 移动二维码支付 推进二维码扫码智能POS
  18. Rust+物联网智能报警方案、Rust腐蚀智能电路教程
  19. 羧基/羟基/氨基/巯基/环氧基/磺酸/胺基/苯基官能团化二氧化硅微球制备研究过程
  20. java字符串相加_String字符串相加的原理

热门文章

  1. 【漏洞复现】通达OA v11.7 在线任意用户登录漏洞
  2. 数仓建模主题--事件归因分析主题
  3. C语言 输入一个十六进制数,输出相应的十进制数
  4. 排列(全排,前一个,下一个)
  5. python005 -- from inport 作用
  6. Google Cloud 技术矩阵,全栈赋能4大游戏品类
  7. 淘宝到底还能不能盈利了
  8. 会议论文影响因子多少_整天都在讲的SCI论文、影响因子、核心期刊到底是什么?...
  9. 京东app商品详情源数据接口(item_get-获得JD商品详情)
  10. 跪着看完这14个机械动图