美文网首页
Javad多线程(未)

Javad多线程(未)

作者: HamletSunS | 来源:发表于2019-07-28 21:57 被阅读0次

启动多线程的3种方式

继承Thread类、实现Runnable接口、匿名类


  1. 继承Thread类
  • 在run方法中实现主逻辑(run对于子线程就好比主方法),其它部分跟正常的类一样
  • 在主方法中,通过上一步的类实例化的对象调用start()方法,开启子线程
  1. 实现Runnable接口
  • 接口中定义了run方法,实现它,同1中的实现类的逻辑是一样的
  • 因为是实现的接口,并没有开启子线程的start()方法,1中有start()方法是因为它继承的是Thread类,而我们这里是实现的Runnable接口,于是我们需要把实现类的实例化对象当作参数传给Thread类的构造函数,得到一个Thread的对象,再调用start()方法开启子线程
  • 简述一下:1. 实现Runnable接口,设实现类为A 2. new Thread(A).start()开启子线程

  1. 匿名类
    使用匿名类快速继承Thread或者实现Runnable
  • 匿名类没有构造函数,所以如果有需要输入的参数需要在类外定义好,并用final进行修饰(1.7以后不强制加final,但编译过程中会自动转,但最好还是

常见线程方法

sleep join yield setPriority setDaemon
sleep:当前线程暂停,注意,它是Thread类的静态方法,所有类和类对象共享,其实就相当于暂停
join:执行当前代码的线程等待调用join方法的线程结束返回后再继续执行,应用场景:等待子线程结束
setPriority:设置线程优先级


线程同步synchronized用法

  • 可以把synchronized想象成一个针对于某个具体对象的令牌,同一时间只允许一个线程持有它,持有它的线程可以独占任何被synchronized修饰的方法或代码块,此时别的进程不能访问synchronized修饰的方法或代码块。
    使用方式:
  1. 作为修饰符修饰方法:调用方法时获得“令牌”,令牌的对象为调用当前方法的对象,调用结束扔掉“令牌”
  2. 作为代码块:执行代码块时获得令牌,代码块结束后返还“令牌”,令牌的对象是传入的参数

线程安全
类的所有方法都被synchronized修饰

相关文章

网友评论

      本文标题:Javad多线程(未)

      本文链接:https://www.haomeiwen.com/subject/aqvprctx.html