多线程的介绍

一、多线程

1.多线程的常用方法

  1. start():①启动线程②调用线程的run()

  2. run():将线程要执行的操作声明在run()中

  3. currentThread():获取当前代码执行对应的线程

  4. getName():获取线程名

  5. setName():设置线程名

  6. sleep(long millis):静态方法,调用时可以使得当前线程睡眠的毫秒数

  7. yield():一旦执行该方法,就会释放CPU的执行权(静态方法)

  8. join():在线程a中通过线程b调用join(),意味着线程a进入阻塞状态,直到线程b执行结束,线程a才结束阻塞状态继续执行

  9. isAlive():判断当前线程是否存活

其他方法(不太建议使用):

  1. stop():强行结束一个线程的执行,直接进入死亡状态

  2. void suspend()/ void resume():可能造成死锁

2.线程的优先级

Thread类内部优先级有三个常量:

-MAX_PRIORITY(10):最高优先级

-MIN_PRIORITY(1):最低优先级

-NORM_PRIORITY(5):普通优先级,默认情况下main具有普通优先级

3.多线程的生命周期

新建(New)、就绪(Runnable)、运行(RUNNINg)、阻塞(Blocked)、死亡(Dead)。

4.解决线程的安全问题

1.同步代码块
synchronized(同步监视器this/odj【可以使用static方式保证唯一性】...)
{
    //需要被同步的代码
}

说明:①需要被同步的代码即为操作共享数据的代码;

②共享数据即为多个线程都需要操作的数据;

③需要被同步的代码在被synchronized包裹之后,就使得一个线程在操作这些代码的过程中,其他线程必须等待。

④同步监视器俗称锁,哪个线程获得了锁哪个线程就能执行需要被同步的代码。

⑤同步监视器可以使用任何一个类的对象充当,但是多个线程必须共用同一个同步监视器。

注意:①在实现Runnable接口中,同步监视器可以考虑使用this;

②在继承Thread类方式接口中,同步监视器需要慎用this。

2.同步方法

如果操作共享数据的代码完整的声明在了一个方法中,那么可以将此方法声明为同步方法即可。

public synchronized  void  show()//非静态,此时同步监视器为this
{
    //需要被同步的代码
}
​
​
public static  synchronized  void  show()//静态,此时同步监视器为当前类本身,是唯一的
{
    //需要被同步的代码
}
3.synchronized的好处&弊端

好处:解决了线程的安全问题

弊端:在操作共享数据时,多线程其实是串行执行,性能低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LzYuY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值