1.在将多线程的前提下我先讲讲线程和进程的关系
进程,一个应用对应一个进程,操作系统(OS)管理进程,进程启动需要资源CPU,内存。OS分配资源给进程,一个进程下面可以有很多线程,用来执行代码,线程不能脱离进程独立运行首先。JVM(关于Java虚拟机)是一个进程,JVM会创建一个专门的一个线程(main)去执行main方法,JVM中还有GC垃圾回收的线程等等。
2.线程分为前台线程,和后台线程
前台线程 代码(new Thread()...)
后台线程 JVM分配的线程(main)
3.单线程,多线程
单线程:顺序执行
多线程:线程各自执行不一定有先后
4.简单示例
- public class ThreadTest {
- public static void main(String[] args) {
- Thread thread = Thread.currentThread();
- System.out.println(thread.getName());
- System.out.println("开始");
- ThreadTest test = new ThreadTest();
- test.test();
- System.out.println("结束");
- MyThread myThread = new MyThread();
- System.out.println("开始");
- myThread.start();
- System.out.println("结束");
- }
- public void test(){
- Thread thread = Thread.currentThread();
-
- for(int i = 0;i < 10; i++){
-
-
- System.out.println("nihao"+"线程名字"+thread.getName());
- }
- }
- }
-
-
- class MyThread extends Thread{
- @Override
- public void run() {
- Thread thread = Thread.currentThread();
-
- for(int i = 0;i < 10; i++){
-
- System.out.println("nihao"+"线程名字"+thread.getName());
- }
- }
- }
结果:
- 开始
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- nihao线程名字main
- 结束
- 开始
- 结束
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
- nihao线程名字Thread-0
由上可以得出JVM自己创建了线程main(主线程)自动生成,子线程Thread-0,实现的多线程
由于“开始”“结束”是在主线程main中执行,所以打印“结束”就可能在子线程前面执行
5.线程的创建
匿名内部类内重写run方法
- Thread t1 = new Thread(){
- @Override
- public void run() {
-
- }
- };
- t1.start();
继承Thread重写run方法
- class MyThread extends Thread{
- @Override
- public void run() {
-
- }
- }
- MyThread myThread = new MyThread();
- myThread.start();//启动线程,run方法内部自动调用
实现Runnable接口实现run方法
- public class TreadTest2 implements Runnable{
- @Override
- public void run() {
-
- }
- }
- Runnable t = new TreadTest2();
- Thread thread = new Thread(t);
- thread.start();