java学习day30---(多线程基本概念)
一、多线程基本概念
进程线程概念
软件:对于操作系统来说,当一个软件启动,会有一个或者多个程序进入到内存中,进入到内存中的程序就是一个进程
例如:打开360安全卫士,就会打开360安全模块、360安全组件、360服务组件、360软件管家等程序,都会进入到CPU的内存中
线程通道:一个进程有多个代码块,不同的功能就执行不同的代码块,在执行代码块的时候,就会开启线程通道连接CPU中的逻辑处理器,执行一个功能的代码块;这个逻辑处理器与多个代码块开通线程通道,在这些代码中来回切换,就达到同时执行多个功能的画面
多线程:如果一个进程,允许开启多个线程通道,最终体现的效果是多个功能在同时执行,这个程序就是多线程程序;如果一个进程,不允许开始多个线程通道,一个进程只有一个线程,这个进程就是单线程程序
逻辑处理器是抢占式调度,哪个线程抢到了处理器是随机的,因此线程越多的进程,抢到的机会就越大,执行的效率就越高
每一个线程都是一个独立的栈空间
线程的java实现
一个线程类,要继承Thread类,这个类就是线程类
重写Thread类的run()的方法
在该类中,提供线程任务(代码块)
public class MyThread extends Thread {
.start()开启这个线程对象
如果使用对象调用.run()没有开启线程
这种方式是把线程对象和线程任务绑在一起的,是耦合的
start()与run()的区别:
run方法是线程对象中的线程任务,是线程开启后需要执行的代码
start方法是开启一个线程
另一种解耦的方式
创建一个类,这个类只作为线程任务的存在,传统方式创建:
public class Myrunnable implements Runnable{
public static void main(String[] args) {
Myrunnable myRunnable = new Myrunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
Runnable接口中,只有一个run()重写方法
因此可以使用匿名内部类和lambda写法
//匿名内部类
Thread thread = new Thread(new Runnable() {

浙公网安备 33010602011771号