进程独享系统资源,线程共享进程资源
没有进程就没有线程,没有线程也就没有线程
线程分为,用户线程与精灵线程
精灵线程:在一个用户线程没有调用Start方法之前,调用setDaemon,就把一个用户
线程转换成精灵线程
用户线程可以转换成精灵线程,而精灵线程不可以转换成用户线程
精灵线程消耗系统的资源比用户线程低
精灵线程没有生命周期
线程的生命周期:新建态,就绪态,运行态,挂起态,终止态
创建线程的两种方式:第一是实现runnable接口
第二是继承thread类
|
都要重写run()
实现runnable接口比较继承thread灵活,因为Java实现单一继承,thread继承了一个
类就不能在继承了,而runnable 接口可以实现多继承
sleep与writ的区别?
sleep是不释放资源的等待
writ是释放资源的等待
isInterrupted():判断线程是否已经中断
interrupt():中断线程
interrupted():恢复
join():让线程执行完,让另外一个线程等待
死锁:
当多条线程同时运行时,在一定时间类,所有线程都已经处于挂起状态,都在等待彼
此的唤醒,就会导致死锁
同步:
同步是在多线程中,只允许一个线程执行
同步分为两种:①同步方法 ②同步块
临界资源:
只允许一个线程执行(两个线程同时执行,为了保持线程唯一性,使用同步)
没有进程就没有线程,没有线程也就没有线程
线程分为,用户线程与精灵线程
精灵线程:在一个用户线程没有调用Start方法之前,调用setDaemon,就把一个用户
线程转换成精灵线程
用户线程可以转换成精灵线程,而精灵线程不可以转换成用户线程
精灵线程消耗系统的资源比用户线程低
精灵线程没有生命周期
线程的生命周期:新建态,就绪态,运行态,挂起态,终止态
创建线程的两种方式:第一是实现runnable接口
第二是继承thread类
|
都要重写run()
实现runnable接口比较继承thread灵活,因为Java实现单一继承,thread继承了一个
类就不能在继承了,而runnable 接口可以实现多继承
sleep与writ的区别?
sleep是不释放资源的等待
writ是释放资源的等待
isInterrupted():判断线程是否已经中断
interrupt():中断线程
interrupted():恢复
join():让线程执行完,让另外一个线程等待
死锁:
当多条线程同时运行时,在一定时间类,所有线程都已经处于挂起状态,都在等待彼
此的唤醒,就会导致死锁
同步:
同步是在多线程中,只允许一个线程执行
同步分为两种:①同步方法 ②同步块
临界资源:
只允许一个线程执行(两个线程同时执行,为了保持线程唯一性,使用同步)