栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java基础】实训第九天

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java基础】实训第九天

线程

执行的分支(索引)

(串行、并行、并发、进程、线程)

  1. 如何创建线程?
  1. 继承Thread

  1. 实现Runnable接口

 

多线程的使用场景

多个线程分解庞大的分解,,比如:

  1. 下载文件(多个线程一起下载,下载的更快。因为单个线程获得cpu的运行概率不大)
  2. 抢票(创建多个线程一起抢,概率大)

但是要注意不是线程越多越好,内存消耗大

 

进程和线程区别?
  1. 每个进程都有独立的内存空间
  2. 一个进程至少要有一个线程
  3. 每创建一个线程都有自己的栈、本地方法区、程序计数器

run():指定线程的任务

Thread.currentThread().getName():获取当前线程的名字

继承方式VS实现接口

  1. 继承方式资源不共享,实现接口方式共享
  2. 继承方式无线程安全问题,实现接口方式有线程安全问题

线程不安全的含义?

多线程修改同一份资源带来的数据错乱

处理方案?

  1. 同步
  1. 同步方法

 

  1. 同步代码块

 

 

 

 

监(jiān)视(shì)对(duì)象(xiànɡ)一般是this或者字节码对象

 

  1. 加锁

线程安全

多线程修改同一份资源不会数据错乱

单例模式
  1. 饿汉式(无论如何先创建实例) 

  1. 懒汉式(需要的时候再创建实例,但是线程不安全)

 

 

  1. 方法一(同步方法)

 

 

  1. 方法二(同步代码块)

 

 

  1. 方法二的优化

 

 

如果已经有实例了,就直接返回,不需要让其他线程继续等浪费时间

线程的常用方法
  1. join
  2. getName
  3. setName
  4. setPriority

 

 

 

等到知道Thread的任务完成后才继续向下执行[插队]

join(long mills):插到main线程中停留多久

setPriority()并不是说一定会,而是增加了概率而已

 

 

two进不来,因为没让资源释放,没把锁打开。当one执行完,two进来了,但是此时的count为0

Thead.sleep():让当前线程休眠,但是不会释放资源,不开锁

thread.wait():线程一直休眠,除非调用调用notify()唤醒

thread.wait(long timeout):休眠多少时间,当到底时间该线程会自动醒来

Sleep()和wait()的区别?
  1. Sleep()是线程的方法,wait()是Object的方法
  2. Sleep()不会释放资源,不释放锁。Wait()会
  3. Wait()可以无限等待(用notify/notifyAll唤醒)。。。
  4. 两者都是让线程休眠

notify/notifyAll()随机唤醒线程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/881189.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号