黑马程序员 线程(2)

---------------------- ASP.Net+Android+IOS开发 、 .Net培训 期待与您交流! ----------------------

1.       创建线程的二种方式:实现Runnable接口

(1)    定义类实现Runnable接口

(2)    覆盖接口的run方法,将线程的任务代码封装到run方法中

(3)    通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thread类的构造函数的参数进行传递

原因:因为线程的任务对象都封装在Runnable接口子类对象的run方法中

所以要在线程对象创建时就必须明确要运行的任务

(4)    调用线程对象的start方法开启线程

2.       使用Runnable接口实现多线程的好处

(1)    将线程的任务从线程的子类中分离出来,进行了单独的封装,按照面向对象的思想将任务封装成对象

(2)    避免了java单继承的局限性

Runnable接口创建线程对象较为常用

3.       线程安全问题产生的原因:

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

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

解决思路:将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其它线程是不可以参与运算的。必须要当前线程把这些代码都执行完毕后,其它线程才可以参与运算。

Java中用同步代码块可以解决此问题。

同步代码块的格式:

synchronized(对象)

{

       需要被同步的代码;

}

4.       线程同步的好处:解决了线程安全问题

同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁

5.       线程同步的前提:同步中必须有多个线程并使用同一个锁

6.       同步的两种体现形式:同步代码块,同步函数

7.       同步函数和同步代码块的区别

(1)    同步函数的锁是固定的this

(2)    同步代码块的锁是任意的对象

注意:开发时建议使用同步代码块,同步函数是同步代码块的简写形式(前提是同步代码块的锁是this)

8.       静态的同步函数使用的锁是该函数所属字节码文件对象

字节码文件对象的2种表现形式

getClass方法和类名.class属性

9.       死锁的体现形式之一:同步的嵌套

10.   多个线程操作同一个任务(即线程任务是一个对象)

---------------------- ASP.Net+Android+IOS开发 、 .Net培训 期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值