线程都没了解过,你还敢说学过Java吗?

线程

线程是调度CPU的最小单元,也叫轻量级进程LWP (Light Weight Process)。

两个模型:

  1. 用户线程(ULT):用户程序实现,不依赖操作系统核心,应用提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/核心态切换,速度快。内核对ULT无感知,线程阻塞则进程(包括它的所有线程)阻塞
  2. 内核线程(KLT):系统内核管理线程(KLT),内核保存线程的状态和上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行运行。线程的创建、调度和管理由内核完成,效率比ULT要慢,比进程操作快

在这里插入图片描述

线程和进程

多进程:在操作系统中能(同时)运行多个任务(程序)

多线程:在同应用程序中有多 个顺序流(同时)执行

创建线程

方式1 :

  1. 自定义类继承Thread
  2. 重写run()方法
  3. 在run()方法中增加子线程中要做的事情
  4. 创建自定义线程类对象
  5. 调用自定义线程类对象的start()方法 (只能调用一次)
    由于Java只支持单继承,用这种方法定义的类不能再继承其他类
public class Test {

	public static void main(String[] args) {

		new Thread() {
			public void run() {
				for (int i = 0; i < 100; i++) {
					System.out.println("A:" + i);
				}
			}
		}.start();
		for (int i = 0; i < 100; i++) {
			System.out.println("B:" + i);
		}
	}
}
线程的框架在这里插入图片描述
方式1代码:
public class MyThread extends Thread {

	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("A");
		}
	}
}
public class Test {

	public static void main(String[] args) {

		MyThread myThread = new MyThread();
		myThread.start();
		while (true) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("B");
		}
	}
}

方式2

  1. 自定义类实现Runnable接口
  2. 实现抽象方法run方法
  3. 在run方法中增加子线程中要做的事情
  4. 创建自定义线程类对象
  5. 创建一个 Thread对象, 把自定义线程类对象作为Thread构造 器
  6. 调用Thread对象的start方法启动线程
方式2代码:
public class MyRunnable implements Runnable {

	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("A");
		}
	}

}
public class Test2 {

	public static void main(String[] args) {
		MyRunnable mr=new MyRunnable();
		Thread r=new Thread(mr);
		r.start();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章