第十三章 多线程1

13.1 多线程

线程就是进程的一条执行路径,一个进程可以有多条执行路径(即多线程)。

一个进程中至少有一条线程。

使用多线程是为了同时执行多部分代码,每一个线程都有各自的任务。


13.2 JVM中的多线程

JVM的启动就需要多条线程的支持。eg:主线程、垃圾回收线程。

System.gc(); 即垃圾回收器,但不一定马上执行。

Object类的fanalize()方法被回收器调用以释放空间。


13.3 多线程的创造方式1 --- 继承Thread类

1)集成Thread类

2)子类重写run()方法

3)实例化此类

4)启动线程 start()


13.4 Thread类常见方法

 run(), start(), getName(), currentThread(). etc.


13.5 线程的状态 



13.6 创建线程的方式2 --- 实现Runnable接口

Java不支持多继承,当一个类有父类时只能通过此方法。

Thread类实现了Runnable接口

接口中只有一个方法 run()

Thread t = new Thread (Runnable r)
使用时利用多态实例化线程。

Runnable的优点在于仅仅将线程任务进行对象的封装。


13.7 多线程安全问题

1)多个线程操作共享数据

2)操作共享数据的代码有多条

(当一个线程操作共享数据时,另一条线程参与了运算)


13.8 解决方法 同步代码块

synchronized (obj){
//code...
}

obj称作同步锁,或对象锁,可以为任一对象/类

线程进入同步语句时需要判断是否有线程正在运行

弊端:同步外的线程需要判断同步锁,相对降低了效率

前提:必须有多个线程并使用同一个锁


13.9 同步函数

synchronized用来修饰函数

同步函数使用的锁是this

同步代码块则可以指定任意同步锁


13.10 静态同步函数

静态方法中没有this只想,同步函数的同步锁为该函数所属字节码文件对象,可以使用getClass()获取,也可以用 Obj.class


13.11 死锁

多个线程操作多个锁,导致互相锁死。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值