JAVA多线程(三)


用到的代码后面会添加上去,如果急需要的话,评论留下邮箱

线程优先级

(1)每个线程都有优先级,优先级越高,获得CPU资源的机会越大,只是机会变大了,不是一定就能获取到
(2)线程优先级范围:1-10
(3)主线程默认优先级:5
(4)自定义线程:默认优先级:自定义的线程优先级跟启动这个线程的一样
(5)设置 & 获取优先级方法

public final void setPriority(int newPriority)
public final int getPriority()

用户线程与守护线程

(1)用户线程
主线程默认:用户线程,不能修改其为守护线程

(2)守护线程

  1. 每个线程都可以设置为守护线程,也可以设置为不是守护线程
  2. 特点:
    ①守护线程可以看做是用户线程保姆,是为用户线程服务的
    ②自定义线程是否是守护线程和启动它的线程默认一样
    ③所有用户线程都挂了,守护线程就没有必要工作了,就会死亡,当然不一定立即死亡,有可能要处理后事。
  3. 注意:要修改其是否是守护线程,不能在就绪状态及其以后的状态修改
  4. 设置 & 判断是否是守护线程 方法
public final void setDaemon(boolean on)
public final boolean isDaemon()

线程同步

(1)为什么要线程同步?
多线程环境下,多个线程对象访问一个数据会出现线程安全问题
案例:卖票
出现了重复的票和负数的票

(2)线程同步方式

  1. 同步代码块
  • 一块代码{}只能一个线程执行完毕后,其他线程才能跑。
    语法:synchronize(同步监听对象){
    需要被同步的代码(有线程安全问题的代码)
    }

  • 同步监听对象:
       ①相关线程之间一定要保证同步监听对象是同一个
       ②静态同步代码块默认的监听对象是this
       ③类名.class:字节码对象,有且只有一份

  1. 继承Thread
    (1)同步监听对象只能使用类名.class
    (2)如果是使用的一个对象也可以是this——案例:存钱-取钱-存钱-取钱
  2. 实现Runnable接口
    可以是this, newObject()…, 类名.class
    2、同步方法
    语法:
    在方法签名中的返回值之前加入synchronized,例:
    synchronized private static void main(param){
    }
    监听对象:
       ①同步方法不需要写同步监听对象,实例方法(非static修饰)默认同步监听对象是this;
       ②同步方法不需要写同步监听对象,静态方法(有static修饰)默认同步监听对象是当前类所在的字节码对象 Xxx.class;

注意事项:
   ①继承模式下某方法又调用自己类成员方法,不能使用同步方法
   ②实现模式下,直接加synchronized就可以了

  1. 锁机制
    ReentrantLock

线程通信

主要两个方法:
(1)wait() 等待
(2)notify() 唤醒该同步监听对象上面线程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值