java 多线程,sleep()和wait()
java 线程可谓是java中重要的一个机制,在说线程之前需要知道什么是进程,进程和线程的关系是是什麽?
1.什么是进程?什么是线程?
进程:用句简单的粗俗的来说,进程就是程序。进程是一个正在运行的程序!比如:打开一个记事本程序,那么这个正在运行的记事本程序就是一个进程。
线程:线程是由进程所创建来执行某个功能的一个机制。那么也就是说,没有进程就没有线程。一个线程只能对应一个进程,一个进程却可以有多个线程的存在。
2.那么在java中如何创建一个线程?
在java中创建线程有两个方法:
一:通过类继承Thread实现线程创建。
例:class Thread1 extends Thread {
public void run() {
System.out.println("hello, the world!");
}
}
public class Text {
public void main(String[] args) {
new Thread1().start();
}
}
二:通过实现Runnable来创建线程
例:class Tread2 implements Runnable {
public void run() {
System.out.println("wellcome to Java world!");
}
}
public void Text {
public void main(String[] args) {
new Thread(new Thread2()).start();
}
}
同样两种方法都可以通过匿名内部类的方式创建线程。
3. sleep()和wait()是什麽?他们有什么区别,对同步有什么影响。
sleep():是线程的一个睡眠方法,它可以接收long类型的参数作为睡眠的时间!当线程运行该方法时,线程会进入睡眠状态,把cpu时间片让出给其他线程使用。当参数时间之后,线程会自动唤醒,等待下一个时间片段继续执行。在睡眠期间,sleep()不会释放线程锁,也就是或,该线程所访问的同步块会一直被该线程占用,别的线程无法访问,直到线程重新启动,并释放线程锁。
wait():是属于Object的类,wait()和sleep()都是使线程进入睡眠状态,但是wait()需要别的线程去使用Thread.notify()唤醒被wait()睡眠的线程,否则线程会一直处于睡眠状态,知道程序关闭。如果该线程正占用着同步资源,那么一直不唤醒,就会导致同步资源无法访问,避免这样,所以当wait()睡眠的线程会释放线程锁,让出cpu时间片段,当被唤醒的时候,该线程会重新等待下一次时间片段,重新进入同步块。
4.几个常用的线程方法
Thread th = Thread.currentThread(); 用于获取运行当前代码片段的线程
long getId() 返回该线程的标识符
String getName() 返回该线程的名称
int getPriority() 返回线程的优先级
Thread.state getState(); 获取线程的状态
boolean isAlive(); 测试线程是否处于活动状态
boolean isDaemon(); 测试线程是否为守护线程
boolean isInterrupted(); 测试线程是否已经中断