day23

多线程 多线程实现4种 定义一个类{和匿名内部类}实现Runnable或继承Thread(推荐)
进程的概述   步骤:继承 重写 创建 启动
      :正在运行的应用程序 多进程:多个
多进程的意义:提高CPU的使用率
注意:多个进程不是同时进行,CPU在一个时间点只能进行一个进程,高速切换。谁抢到,谁执行
线程的概述
      :应用程序可以运行多个任务,一个任务就是一个线程
多线程的意义
            提高应用程序的使用率
    并行和并发
            并行:在一个时间段同时执行
并发:在一个时间点同时执行
JVM运行原理以及JVM启动的线程探讨
   使用java命令运行程序会启动JVM,相当于启动了一个进程,进程会自动启动一个线程(主线程)这个线程需要调用main方法
JVM的的启动是多线程的(至少两个)一个是主线程,一个是垃圾回收线程.
重写run方法:封装必须被线程执行的代码 书写原则: 一般是比较耗时的代码
Thread.currentThread().getName() 获取当前正在执行的线程  (掌握)
实现多线程
        1   a: 定义一个类然后让这个类继承Thread
  b: 重写run方法
  c: 创建该线程类的对象
  d: 启动线程

        2   a: 定义一个类,然后让该类实现Runnable接口
b: 复写run方法
c: 创建对象
d: 创建Thread的对象,把c中的对象作为参数传递进来
e: 启动线程
注意:启用线程用start方法,线程只能启用一次
获取,设置线程名称,休眠,加入,礼让 守护,终止,中断
获取 public String getName(): 获取线程的名称
设置 public void setName(): 改变线程名称,使之与参数 name 相同。
休眠:public static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
加入 public final void join() 等待该线程执行完毕以后再执行其他线程。
礼让 public static void yield()暂停当前正在执行的线程对象,并执行其他线程。
守护 public final void setDaemon(boolean on)将该线程标记为守护线程
    (当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。)
终止 public final void stop(): 直接将线程停止 
中断 public void interrupt():  打断线程的阻塞状态, 它还将收到一个 InterruptedException。 还会继续执行
常见线程调度模型
       分时:给通过的线程分配相同指定的时间
抢占式:谁优先级高执行谁,相同则随机
   优先级范围1-10;
判断一个多线程应用程序是否有问题:
       1.多线程环境
2.共享数据
3.多条语句同时操作共享数据
需要:同步代码块 synchronize(对象){需要被同步的代码} 作用:保证数据安全性
synchronize:关键字,修饰一个方法/代码块的时候,能保证在同一时刻最多只有一个线程执行该段代码
   注意:同步代码块保证数据的安全主要依赖于这个对象,所以这个对象(称为锁或者监视器)应该是被所有线程所共享
I: 同步方法,同步代码块, 静态同步代码的锁对象的问题
* 同步代码块的锁: 可以是任意的对象
* 同步方法的锁: this
* 静态同步方法锁: 当前线程类的字节码文件对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值