Java多线程
一、进程与线程
- 线程都是在进程基础上并发执行。
- 如果现在运行多个任务,则说有的资源被所有线程共用。
二、Java的多线程实现
- 继承thread类
(1)thread类在java.lang包中,一个类继承了这个类,就叫做多线程操作类,并且必须明确的覆写run()方法。
(2)调用start()方法才是真正的启动线程。
(3)java允许java程序访问操作系统的函数,在Thread的start()方法
中,有一个native关键字,表示的是一个由java调用本机操作系统函数的关键字。同时证明了,要想实现多线程,必须要获得操作系统的支持。
(4)sleep()方法,使线程休眠,时间为微秒
(5)join()方法使其他线程等待当前线程终止,等待时间为毫秒
(6)static void yield()方法,当前运行的线程释放处理器资源
(7)返回当前运行的线程引用。 - 实现runnable接口
(1)实现runnable接口的类在创建线程时,通过Thread类的有参构造函数,创建线程,传入两个参数,第一个传入实现runnable接口的对象,第二个参数传入线程的名字。 - 深入比较Thread和Runnable接口
(1)从定义格式上,Thread实现了Runnable接口,当使用其他类mythread事项runnable接口时,相当于采用代理模式,Thread实现核心操作,mythread作为代理。
(2)Thread实现的线程不能共享资源,Runnable接口实现的线程可以共享资源。例如卖票因为Thread的子类中都有单独的票数变量,所以各卖各的。而Runnable不一样
(3)使用结论:使用Runnable接口比Thread类有以下优点:
适合多个线程共同处理一个资源,可以避免单继承带来的影响,增加了程序的健壮性。
三、同步与死锁
- 同步:所谓同步就是多个操作在同一个时间段内只有一个线程进行,其他线程等待此线程完成之后才可以进行,想要实现有两种方法,使用同步代码块和同步方法。
(1)同步代码块:使用synchronized关键字声明的代码块。同步的时候必须指定同步对象,一般使用当前对象,用this表示。
(2)同步方法:使用synchronized关键字声明的方法叫做,同步方法 - 死锁:资源共享时需要用到同步,过多的同步会造成死锁,死锁是程序在运行时产生的一种状态。
- Java方法完整形式:
访问权限 final static synchronized 返回值类型 (参数类型 参数名称)throws Exception1,Exception2,…{ return 返回值 }