进程:一个正在运行的程序
线程:一个进程中有多个线程,每一个线程就相当于一个执行的任务
特点:程序由上至下依次执行,且一个执行完,才会执行下一个
有点:数据绝对安全
弊端:效率不高
2.线程是如何执行的:
开启一个线程,相当于开启了一个cpu的 执行路径(相对独立的),cpu在执行多个线程时,是随机的,和线程的优先级有关
分时调度:cpu会在多个线程 进行随机切换
3.主线程
多线程的程序 除了主线程以外 一般都叫子线程,一个程序只有一个主线程.
主线程(叫main的线程)是如何执行的?
JVM调用main函数-->cpu就给叫main的函数开辟了执行路径-->相当于在这个执行路径中,执行main函数的代码
Thread线程(开辟一个主线程以外的子线程)
1.创建一个Thread类的子类
2.重写run方法
run方就是你要线程执行的代码
3.调用start方法,开启线程(不能重复开启)
获取当前线程名字的方法
Thread.currentThread().getName()
创建线程类
2.运行状态(start())
3.死亡状态(run方法运行完毕)
4.受阻塞状态(CPU未执行该线程时)
5.休眠状态(sleep方法 休眠时间过了 恢复)
6.等待转态(wait notify)
线程:一个进程中有多个线程,每一个线程就相当于一个执行的任务
一.线程
1.标准的单线程程序特点:程序由上至下依次执行,且一个执行完,才会执行下一个
有点:数据绝对安全
弊端:效率不高
2.线程是如何执行的:
开启一个线程,相当于开启了一个cpu的 执行路径(相对独立的),cpu在执行多个线程时,是随机的,和线程的优先级有关
分时调度:cpu会在多个线程 进行随机切换
3.主线程
多线程的程序 除了主线程以外 一般都叫子线程,一个程序只有一个主线程.
主线程(叫main的线程)是如何执行的?
JVM调用main函数-->cpu就给叫main的函数开辟了执行路径-->相当于在这个执行路径中,执行main函数的代码
Thread线程(开辟一个主线程以外的子线程)
1.创建一个Thread类的子类
2.重写run方法
run方就是你要线程执行的代码
3.调用start方法,开启线程(不能重复开启)
获取当前线程名字的方法
Thread.currentThread().getName()
创建线程类
class MyThread extends Thread{ //定义自己的name属性(尽量避免重名) private String name; public MyThread(){ } //有参构造方法 //1.给父类的name属性赋值 //2.给本类的name属性赋值 public MyThread(String name,String myname){ super(name); this.name = myname; } //父类中使用final修饰的该方法 不能被重写 //可以修改一下方法名,重新提供set/get方法 public void setMyName(String name) { this.name = name; } public String getMyName(){ return this.name; } @Override public void run() { } }
线程的创建方式
1.用Thread子类的方法Thread thread = new Thread() { @Override public void run() { System.out.println("子线程执行的方法"); } }; thread.start();2.接口实现类的方法 runnable
Runnable runnable = new Runnable() { @Override public void run() { System.out.println("子线程方法"); } }; Thread thread2 = new Thread(runnable); thread.start();3.方式2两步一起写
Thread thread3 = new Thread(new Runnable() { @Override public void run() { System.out.println("子线程方法"); } });
二.线程的6种状态
1.新建状态(new thread)2.运行状态(start())
3.死亡状态(run方法运行完毕)
4.受阻塞状态(CPU未执行该线程时)
5.休眠状态(sleep方法 休眠时间过了 恢复)
6.等待转态(wait notify)