先来说一说线程和进程的区别:
在电脑上打开一个app,任务管理器就想显示这个进程的名称,比如迅雷,而迅雷里面一下子可以同时下载多个文件,这多个文件的下载就可以看成多个线程;
所以进程和线程有包含的关系,一个进程包含多个线程;
线程开启的方式:
- 继承Thead类,重写run()方法;
- 实现Runnable接口,重写run()方法;
- 实现Callable接口,重写call方法如下图所示:
线程开启的方法是start();
线程的五种状态:
- 新建 线程被new
- 等待 调用start()
- 运行 被cup调用
- 阻塞
- 死亡
sleep()和wait()的区别:
sleep可以使当前线程休眠,不会释放锁 ,时间到了自动唤醒;
wait会释放锁,需要notify或者allnotify唤醒;
死锁的概念:
指几个线程相互竞争一个资源而造成相互等待的现象,如a线程需要b线程进入a才能出来,b需要a出来才能进入,所有就会造成相互等待;
解决死锁的方式:
- 加锁顺序;
- 加锁时限;