Runnable接口
步骤:
1.创建类实现Runnable接口
2.重写run
3.创建当前类对象
4.创建线程Thread对象,当前类对象作为参数
5.待用start
Runnable接口的实现类,不是线程,只是有run封装来了线程所要执行的代码
Thread才是线程对象
Runnable接口的实现类通过Thread转化交给JVM执行run方法,转化之后Runnable接口的实现类可以看作线程
Thread和Runnable区别
Runnable可以实现资源共享,多个线程对象所使用的Runnable接口的实现类时同一个
Thread不能实现资源共享,多个线程都会使用new开辟空间
资源共享中的问题(安全问题):
问题一:
资源重复
问题二:
资源超出
问题出现的原因:
多线程的随机性导致
如何判断是否数据安全问题:
1.多线程
2.资源共享
3.多语句操作资源共享
解决方案:
因为多线程的随机性,导致每个线程执行多语句操作资源共享时,语句执行不完整
让语句执行完整
通过锁
synchronized锁(同步):
同步代码块:this
格式:
synchronized(任意对象){}
同步方法:this
格式:
修饰符 synchronized 返回值类型 方法名(){}
同步静态方法:类名.class
格式:
修饰符 static synchronized 返回值类型 方法名(){}
注意:
想要锁住需要多个线程使用同一个对象