a.为什么使用多线程?
为了提高程序效率。
b.创建线程的两种方式
1.继承Thread类 2.实现Runnable接口(a.面向接口编程 b.接口可以多重实现)
c.多线程api
getId() 拿到线程id
getName() 拿到线程名称
start()启动线程 stop()停止线程
join() 当前线程等待join方法的线程完成后,才能继续向下运行
sleep()
这里就要注意因为sleep是一个静态方法,因此和线程对象是无关的,要看他现在在哪个栈内存中,也就是看他当前在哪个线程中,很明显他现在主线程中,主线程调用类中的main方法,所以也就是当t1.start()后,t1线程已经开始运行,当2s后运行主线程中的输出语句“Hello world”
运行结果
d.守护线程
e.多线程的几种状态
1.synchronized锁定的是对象。
2.线程重入问题
3.synchronized执行过程中,如果抛异常,默认会自动释放锁