一:单核执行多线程
1.
首先要知道 进程,线程,程序进程:执行中的程序叫做进程(Process),是一个动态的概念,在一个进程中包含多个线程线程:指的是一条执行路径程序:就是静态的代码块
2.
那么在一个进程中,会有一个主线程 也就是main线程,我们一般通过继承Runable接口 重写 run ()方法,然后创建一个实现类对象.然后启动线程,在启动线程中需要用到start()方法。而start()方法是Thread类的新增方法,所以在启动线程时 , new Thread(实现类对象).start();
package com.wyj.one;
/*** 多线程的创建方式二:* 1:创建:实现Runnable接口+重写run* 2:启动:创建实现类对象+Thread对象+start方法(这里需要Thread对象 因为start方法是Thread特有的);* @author 86155** 推荐:避免单继承的局限性,优先使用接口 方便共享资源*/
public class Demo4_多线程的创建02 {public static void main(String[] args) {/*//创建实现类对象son1 p = new son1();//启动start方法Thread t = new Thread(p);t.start(); //当程序执行到这里 然后交给cpu去调度(这是一种执行路径)//程序不会停止会去执行下一行代码(即是主线程的的执行路径)*///上方代码合为一个代码 ( 如果一个实例化对象只使用一次的话就可以使用匿名对象)new Thread( new son1()).start();for( int i = 0; i < 20; i++) {System.out.println("我在 codeing!");} }
}class son1 implements Runnable{//线程入口点public void run() {for(int i = 0; i < 20; i++) {System.out.println("我在听歌曲!");}}}
二:进阶
真正的多线程是需要多核的,那么我们写的程序当中只是调用了一个cpu,那么在处理多线程时,在同一个时间段内只能处理一个代码块,单核CPU上运行的多线程程序, 同一时间只能一个线程在跑, 系统帮你切换线程而已, 系统给每个线程分配时间片来执行, 每个时间片大概10ms左右, 看起来像是同时跑, 但实际上是每个线程跑一点点就换到其它线程继续跑。其效率不会有提高的,而且切换线程反倒会增加开销。 那么当启动线程后,当cpu调用到run()方法时,就执行这个方法,当cpu执行其他线程时,run()方法停止,当再次回到run()方法时,会继续上次执行到哪,然后继续执行下去 。