标签:bsp ack 耦合 col 类型 图片 多线程程序 启动 优先级
多线程介绍
进程: 进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序
l 分时调度 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间
l 抢占式调度 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。
CPU(中央处理器)使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。
多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高
主线程 jvm启动后,必然有一个执行路径(线程)从main方法开始的,一直执行到main方法结束
多线程内存图
创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。创建对象,开启线程。run方法相当于其他线程的main方法。
另一种方法是声明一个实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程
创建线程方式一继承Thread类
创建线程的步骤:
1 定义一个类继承Thread。
2 重写run方法。
3 创建子类对象,就是创建线程对象。
4 调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法
注意:线程对象调用run方法不开启线程。仅是对象调用方法。线程对象调用start开启线程,并让jvm调用run方法在开启的线程中执行
Thread.currentThread()获取当前线程对象
getName() 得到线程名称
代码:
package com.oracle.demo04; public class MyThread extends Thread{ //重写run方法来描述线程任务 public void run() { for (int i = 0; i <100; i++) { //getName() 得到线程名称 System.out.println(Thread.currentThread().getName()+":"+i); } } } package com.oracle.demo04; public class Democracy { public static void main(String[] args) { //创建线程 MyThread mt=new MyThread(); //开启线程 mt.start(); //获取相城对象 //描述主线程任务 for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } }
创建线程的步骤。
1、定义类实现Runnable接口。
2、覆盖接口中的run方法。。
3、创建Thread类的对象
4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
5、调用Thread类的start方法开启线程
package com.oracle.Demo; //线程任务类 public class Myrunnable implements Runnable{ //描述线程任务 @Override public void run() { for (int i = 0; i <100; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } } package com.oracle.Demo; public class Demo01 { public static void main(String[] args) { // 创建线程任务对象 Myrunnable mr=new Myrunnable(); //创建线程对象 Thread th=new Thread(mr); //开启线程任务 th.start(); //描述主线程任务 for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } }
避免了单继承的局限性,所以较为常用
更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务
降低耦合性
使用线程的内匿名内部类方式,可以方便的实现每个线程执行不同的线程任务操作。
package com.oracle.Demo; public class Demo02 { /*匿名内部类格式 * 父类类型 或接口 对象名=new 父类类型或接口i{ * 重写父类方法 * } * * * */ public static void main(String[] args) { //继承Tread的方式 Thread th=new Thread(){ public void run(){ for (int i = 0; i <100; i++) { //getName() 得到线程名称 System.out.println(Thread.currentThread().getName()+":"+i); } } }; //开启线程 th.start(); //2.实现Runnable 接口方式 Runnable r=new Runnable() { public void run() { for (int i = 0; i <100; i++) { //getName() 得到线程名称 System.out.println(Thread.currentThread().getName()+":"+i); } } }; //创建线程对象 Thread th2=new Thread(r); //开启线程 th2.start(); } }
标签:bsp ack 耦合 col 类型 图片 多线程程序 启动 优先级
原文地址:https://www.cnblogs.com/zqy6666/p/12309365.html