java中级
作者:互联网
java多线程
基础概念
- 多进程与cpu:
cpu有几核就能开多少真实的进程,超过的就变成了模拟进程,即一个核可能开几个进程,但其实是通过在多个进程之间切换实现的。 - 多线程与cpu
进程中的多个线程谁先去cpu执行是系统控制的,人干预不了。
继承Thread类(不推荐使用):继承类实现子线程
-
说明:
继承了Thread类并改写run方法就相当于创建了一个子线程方法 -
示例:
public class test1 extends Thread { @Override public void run(){ //run方法体 for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } } }
-
通过start方法调用子线程方法,通过子线程运行:运行结果就是主线程的和子线程的结果交替出现,即两个线程都在执行,至于那个具体执行那个是系统调度
public class test1 extends Thread { @Override public void run(){ //run方法体 for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } } public static void main(String[] args){ test1 testThead = new test1(); // 实例化 testThead.start(); // 调用子线程方法run //主线程的方法体 for (int i = 0; i < 200; i++){ System.out.println("main执行"+i); } } }
如果不用start方法,而是直接换成run,即
testThead.run();
,就相当于没有启动子线程,而是直接调用run方法,那就按顺序先执行run再执行主线程的方法体。start就相当于告诉系统,start的方法要在子线程中执行。如果有几个start启动的子线程,这些子线程的运行顺序是同样是不固定的。
调用Runable接口:调用接口实现子线程
- 说明
上面的类实现子线程,存在java单继承的问题,所以通过接口实现子线程就可以拥有接口可以多调用的好处。本质上Thread类也是在Runable接口上实现的。所以Runable接口实现多线程更灵活。 - 示例
调用Runnable接口同样需要改写run方法public class test2 implements Runnable{ @Override public void run(){ //run方法体 for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } }
- 通过接口start子线程:但还是需要Thread类的start方法
public class test2 implements Runnable{ @Override public void run(){ for (int i = 0; i < 5; i++){ System.out.println("run执行"+i); } } public static void main(String[] args){ test2 testThead = new test2(); // 先实例化接口类 Thread t1 = new Thread(testThead); // 再实例化Thread类并将接口类作为参数 t1.start(); // 通过Thread类start // 上面两行可以简写成new Thread(testThead).start() //主线程 for (int i = 0; i < 200; i++){ System.out.println("main执行"+i); } } }
线程常用方法
- 起名字
- 获得当前线程名称
标签:中级,java,Thread,start,线程,run,方法,public 来源: https://www.cnblogs.com/taokara/p/16349880.html