多线程

多线程的几种实现方式:

1、继承Thread类,重写run方法,直接声明该类类型的对象调用start方法运行线程,本质上会调用到该类重写的run方法

2、实现Runnable接口,重写run方法,声明该类类型的变量作为参数传入Thread类型的变量调用start方法运行线程,本质上会调用到该类重写的run方法(区别于第一种)

3、实现Callable接口,重写call方法,声明该类类型的变量作为参数传入Thread类型的变量调用start方法运行线程(其实中间会封装一层FutureTask,实现了Runnable接口的一个类),本质上会调用到该类重写的run方法(有返回值)

4、线程池

 

线程安全:

考虑到业务场景的不同,需要对多线程进行同步处理,有两种方式:

1、隐式加锁:synchronized关键字加锁,有两种方式,同步代码块和同步方法,但是为了提高效率,锁定的代码越少越好

(需要注意的是加锁的时候所有的对象要是同一个锁,可能会用到static关键字共享类的成员变量,及一个new出来的对象作为锁的参数,或者直接给本类类型加锁,及xxx.class)

2、显式加锁:lock接口的实现类ReentrantLock,实现了显式加锁的要求,该实现类的对象调用lock()方法和unlock()方法可实现加锁与解除锁定

显式加锁为jvm调度,相比隐式加锁更加节约资源

说到线程安全,想到一个知识,做个笔记,arraylist和hashmap的线程安全类vector以及hashtable已经过时,现在使用SynchronizedList和SynchronizedMap

 

使用时应该注意的方法有sleep()、wait()、join()、notify()等,其他参考API手册

上一篇:Hystrix使用入门手册(中文)


下一篇:监控访问日志的状态码