线程的api
- static Thread currentThread();
获取当前线程对象 - Long getId();
获取线程的标识符 - String getName();
获取线程的名字 - int getPriority();
获取线程的优先级
优先级有10级 1----10(最高) - boolean isAlive();
获取当前线程是否为活动状态 - boolean isDaemon();
获取当前线程是否为守护线程 - boolean isInterrupted();
获取线程是否中断 - staric void sleep(long 毫秒数)
指定的毫秒数内,让当前正在执行的线程休眠(暂停执行)
此操作手操作系统计时器和调度程序精度和准确度的影响
守护线程
当前进程中只剩下守护线程时,所有的守护线程强制终止
联合线程
void join()
此方法用于当前线程结束
比如:
t1.join();//t1线程没有结束,当前线程不会结束
线程的几个重要的关键点:
1. 线程何时启动,即线程对象.start();是有先后顺序的,有可能某个线程的启动要看他的主线程是否启动
2. run方法的执行顺序(run方法并发执行)看的是start()后,何时能获取到CPU
3. 可能run并发执行着,需要注意线程之间的依存关系,当前线程是否执行完毕,是依赖于另一个线程是否执行完毕,run都执行,但结束是有顺序的(联合线程,join方法)
Synchronized关键字,同步,反义词:asynchronized 异步
同步资源,同步锁
- 此关键字可以修饰在方法上
比如:
public synchronized void method(){
//代码块
}
当前线程1调用method方法时,就会给method方法添加一个锁,如果方法不执行完毕,其他线程就不会执行此方法,线程排队等待
- 此关键字可以修饰在对象上
比如:
synchronized(某个对象){
//同步代码块
}
当线程1执行同步代码块时,就会给同步代码块添加一个锁,如果代码块不执行完毕,其他线程就不会执行此代码块,线程排队等待
- 此关键字可以修饰在类上
- 比如:
synchronized(类名.class){
//同步代码块
}
当线程1执行同步代码块时,就会给类加一个锁,如果代码块不执行完毕,其他线程就不会执行此代码块,线程排队等待