进程与线程:
1.进程:进程是操作系统结构的基础,是一次程序的执行,是操作系统进行资源分配与调度的一个独立单位。
2.线程:线程是进程中独立运行的子任务。
Java新建线程的方式:
1.继承Thread类:缺点是无法实现多继承(Java只支持单继承)。
package cn.itcast.day06.demo3;
public class MyThread extends Thread{
@Override
public void run(){
System.out.println("继承Thread类新建线程");
}
}
package cn.itcast.day06.demo3;
public class Demo3 {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
2.实现Runnable接口:当要实现的线程类已经有一个父类了,这时就不能在继承Thread类了,可以通过实现Runnable接口。
package cn.itcast.day06.demo3;
public class MyRunnable implements Runnable{
@Override
public void run(){
System.out.println("实现Runnable接口新建线程");
}
}
package cn.itcast.day06.demo3;
public class Demo3 {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread myThread = new Thread(myRunnable);
myThread.start();
}
}
常用方法:
1.currentThread()方法:可以判断当前代码段正在由哪个线程调用。
package cn.itcast.day06.demo3;
public class Demo3 {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName());
}
}
2.isAlive()方法:判断当前线程是否存活,线程正在运行或者准备运行就判为存活。
package cn.itcast.day06.demo3;
public class Demo3 {
public static void main(String[] args) {
System.out.println(Thread.currentThread().isAlive());
}
}
3.sleep()方法:让当前线程休眠指定毫秒数sleep(int time)。
package cn.itcast.day06.demo3;
public class MyThread extends Thread{
@Override
public void run(){
System.out.println("begin:" + System.currentTimeMillis());
try {
Thread.sleep(2000);//当前线程休眠2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("end:" + System.currentTimeMillis());
}
}
package cn.itcast.day06.demo3;
public class Demo3 {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
}
}
4.getId()方法:获取当前线程的唯一标识符。
package cn.itcast.day06.demo3;
public class Demo3 {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
System.out.println(myThread.getId());
}
}
5.yield()方法:该方法是让当前线程暂时放弃CPU资源,让其他线程去占用CPU时间片,但是放弃的时间长短不确定,有可能放弃很长时间,也有可能刚刚放弃又恢复执行。
6.setPriority()方法:设置线程优先级,线程优先级范围为1~10。系统优先执行优先级高的线程,也就是尽量将资源分配给优先级高的线程,但是高优先级的线程并不一定比低优先级的线程先执行完,二者没有必然联系。
停止线程的方法:
1.使用退出标志,使线程正常退出,也就是当run方法运行结束后,退出线程;
2.使用interrupt()方法;
3.使用stop()方法,不推荐使用,该方法已被抛弃!
测试线程是否停止的方法:
守护线程Daemon:
守护线程相当于是非守护线程的保姆,当系统中没有非守护线程时,守护线程才会被销毁,只要系统中还存在一个非守护线程,那么守护线程就会存在。Java中典型的一个守护线程就是垃圾回收线程。