Java并发编程1
最近在看Java关于线程的相关知识,看的是马士兵老师的高并发编程系列av11076511,遂把知识点整理下来,便于以后查阅。
线程的创建
通过继承Thread
类并重写run()
方法
通过继承Thread
类并重写run()
方法,run()
方法中定义需要线程执行的任务,然后调用实现类的start()
方法启动这个线程(ps:单纯的调用run()
方法只是单纯的方法使用,并不能达到启动线程的目的)
1 | public class Current extends Thread { |
输出如下:
1 | 子线程启动,ID为:14,名字为Thread-2 |
通过继承Runnable
接口,并实现run()
方法
通过继承Runnable
接口,实现run()
方法,然后调用实现类的start()
方法启动这个线程
1 | public class WithRunnable implements Runnable { |
输出如下:
1 | 子线程启动,ID为:13,名字为Thread-1 |
线程的五种状态
线程有五个状态
- 新生(
new
):用new
关键字新建了一个线程对象后,该线程对象处于新生态,此时已经有了自己的内存空间 - 就绪(
runnable
):调用了start()
方法后,线程从新生态转化为就绪态,此时线程还没有运行,在等待CPU调度 - 运行(
running
):处于运行状态的线程正在执行自己的run()
方法 - 阻塞
(blocked)
:线程暂停执行,让出CPU时间片,并将其交给其他线程使用 - 死亡
dead
:当前线程完成工作或者抛出异常时,线程死亡
以上简单的介绍了一下线程的基础,下面是关于线程的同步问题
线程同步
在大多数实际的多线程应用中, 两个或两个以上的线程需要共享对同一数据的存取。如果两个线程存取相同的对象, 并且每一个线程都调用了一个修改该对象状态的方法,将会发 生什么呢? 可以想象,线程彼此踩了对方的脚。根据各线程访问数据的次序,可能会产生i化 误的对象。这样一个情况通常称为竞争条件(race condition)。为了避免多线程引起的对共享数据的说误,必须学习如何同步存取。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xt5una!