Contents
- 传统线程技术
- 传统创建线程方式
- 传统定时器技术
- 互斥
- 同步
1.继承Thread类,覆盖run方法
Thread t = new Thread();
t.start();
2.实现Runnable接口
Runnable不是线程,是线程要运行的代码的宿主。
1.看看Thread类源码,捋清Runnable,target,run,start关系
Runnable
是一个接口target
是Thread
类中类型为Runnable
,名为target
的属性run
是Thread
类实现了Runnable
的接口,重写的方法。start
是启动线程的方法- 在
Thread
类中,调用关系为:start
->start0
->run
->target.run
Thread
类的run
方法源码
public void run() {
if (target != null) {
target.run();
}
}
Thread
类的target
属性
/* What will be run. */
private Runnable target;
target
属性由private void init(ThreadGroup g, Runnable target, String name,long stackSize, AccessControlContext acc)
方法初始化。init
方法在Thread
类的构造方法里被调用
2.匿名内部类对象的构造方法如何调用父类的非默认构造方法
传统定时器技术API:
java.util:Class Timer
例子:一个定时器实现交替2秒、3秒打印
static int count = 0;
public static void main(String[] args) {
class MyTimerTask extends TimerTask{
@Override
public void run() {
System.out.println(Thread.currentThread()+" bomb!");
new Timer().schedule(new MyTimerTask(), 2000+1000*(count++%2));
}
}
//3s后开启定时器
new Timer().schedule(new MyTimerTask(),3000);
}
可以使用quarlz
开源工具
关键字:synchronized
,检查锁对象
synchronized(this)
synchronized void function(){}
synchronized(A.class)
经验:
- 要用到共同数据(包括同步锁)或共同算法的若干个方法应该归在同一个类身上,这种设计体现了高聚类和程序的健壮性。
- 同步互斥不是在线程上实现,而是在线程访问的资源上实现,线程调用资源。
例子: 子线程循环5次,主线程循环10次,如此交替50次
设计:
使用一个Business类来包含子线程和主线程要运行的代码,从而,该类的对象成为加锁的对象。同步互斥在该类实现,由线程调用该类的方法,即调用了资源。
代码:
/**
* Created by brian on 2016/2/4.
*/
public class TraditionalThreadCommunication {
public static void main(String[] args) {
Business business = new Business();
new Thread(
new Runnable() {
@Override
public void run() {
for(int i=1;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录