线程常常会伴随进程一起出现,那么二者有什么区别呢?
进程:程序执行的过程,是一个动态概念,持有资源(共享内存,共享文件)和线程。
线程:线程是系统中最小的执行单元,同一个进程中有多个线程,线程共享进程的资源。
创建线程:
1.继承Thread类
2.实现Runnable接口
java线程中常用的方法:
void start():启动线程。
static void sleep(long millis):线程休眠。
static void sleep(long millis,int nanos):同上,休眠时间精确到纳秒。
void join():其他线程要等待执行线程执行完毕之后才会获得运行的机会。
void joni(long millis):其他线程最长需要等待的时间。
void joni(long millis,int nanos):同上,等待时间精确到纳秒。
static void yeild():当前运行线程释放处理器资源。
static Thread currentThread():返回当前正在处理器上运行的线程的引用。
停止线程的方法:
1.使用退出标志来控制线程是执行和结束,也就是当run方法完成后线程终止。
2.使用stop方法强行终止线程
虽然使用上面的代码可以终止线程,但使用stop方法是很危险的,就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,因此,并不推荐使用stop方法来终止线程。
3.使用interrupt方法中断线程。
1.线程处于阻塞状态,如使用了sleep方法。
2.使用while(!isInterrupted()){……}来判断线程是否被中断。
在第一种情况下使用interrupt方法,sleep方法将抛出一个InterruptedException例外,而在第二种情况下线程将直接退出。
因此停止线程的正确方法是设置一个退出标志来控制线程是执行和结束。
使线程休眠1秒钟方法:
1.long time = System.currentTimeMillis();
while(System.currentTimeMillis()-time < 1000){
}
2.Thread.sleep(1000);
线程的交互:互斥与同步
线程的互斥:synchronized
同步的实现主要通过:wait()、notify()、notifyAll()来实习,它们都是Object对象的成员函数。
obj.wait():当前线程进入等待,将当前线程放入对象Wait Set
obj.notifyAll():唤醒所有在obj对象上等待的线程