线程:
Thread类中有这样的明确定义:线程是程序中执行的线程 ,Java虚拟机允许程序同时运行多个执行线程、
- .1. 线程有6 种状态: :新建,运行(可运行),阻塞,等待,计时等待和终止。
- 新建:当使用new操作符创建新线程时,线程处于“新建“状态
- 运行(可运行):调用start()方法
- 阻塞:当线程需要获得对象的内置锁,而该锁正在被其他线程拥有
- 等待:当线程等待其他线程通知调度表可以运行时
- 计时等待:对于一些含有时间参数的方法,如Thread类的sleep()
- 终止:当run()方法运行完毕或出现异常时
1)查看运行状态:Thread类的getState()方法 1)编写类ThreadState,实现Runnable接口
public class ThreadState implements Runnable {
public synchronized void waitForASecond() throws InterruptedException
{ wait(500);//将当前线程暂时等待0.5秒或其他线程调用notify()或notifyAll()
}
public synchronized void waitForLong() throws InterruptedException
{ wait();//永久等待,直到其他线程调用notify()或notifyAll()
}
public synchronized void notifyNow() throws InterruptedException
{ notify();//唤醒由调用wait()方法进入等待状态的线程
}
@Override
public void run()
{ try {
waitForASecond();//在新线程中运行waitForASecond()方法
waitForLong();//在新线程中运行waitForLong()
} catch (InterruptedException e)
{ e.printStackTrace();
}
}
}
2)测试类:ThreadTest
public class ThreadTest{
public static void main(String[] args) throws InterruptedException
{ ThreadState state=new ThreadState();
Thread thread=new Thread(state);//创建Thread对象
System.out.println("新建线程:"+thread.getState());
thread.start();
System.out.println(" 启 动 线 程 :"+thread.getState());
Thread.sleep(100);//当前线程休眠,时新线程运行waitForASecond()方法
System.out.println(" 计 时 等 待 :"+thread.getState());
Thread.sleep(1000);//当前线程休眠,时新线程运行waitForLong()方法
System.out.println(" 等 待 线 程 :"+thread.getState());
state.notifyNow();
System.out.println("唤醒线程:"+thread.getState());
Thread.sleep(1000);//当前线程休眠,时新线程结束
System.out.println("终止线程:"+thread.getState());
}
}
运行结果:
2.Java中每个线程都有优先级属性,具有较高优先级的线程优先于优先级较低的线程执行,每个线程可能也可能不会被标记为守护进程。当在某个线程中运行创建一个新的 Thread对象时,新的线程的优先级最初设置为等于创建线程的优先级,并且当且仅当创建线程是守护进程时才是守护进程线程。 (线程的优先级用数字来表示,范围从 1~10,主线程的默认优先级为5 : Thread.MAX_PRIORITY=10 ; Thread.NORM_PRIORITY=5)
当Java虚拟机启动时,通常会有一个非守护程序线程(通常调用某个指定类的名为 main的方法)Java虚拟机继续执行线程直到发生以下任一情况:已调用类 Runtime的exit方法,并且安全管理器已允许执行退出操作。所有非守护程序线程的线程都已经死亡,要么通过调用返回run方法,要么抛出一个超出run方法传播的异常。
线程与进程?:进程是CPU,内存等资源占用的基本单位,线程是不能独立占有这些资源的;进程之间相互独立,通信比较困难,线程之间共享一块内存区域,通信方便Thread.MIN_PRIORITY=1 ;
以上是让总结的知识点:↑