欢迎使用CSDN-markdown编辑器

来源:互联网 发布:太平洋寿险软件下载 编辑:程序博客网 时间:2024/05/17 08:22

个人博客地址,

java多线程

(一)进程

    进程:正在进行中的程序(直译).

(二)线程

    线程:就是进程中一个负责程序执行的控制单元(执行路径)一个进程中可以多执行路径,称之为多线程。 一个进程中至少要有一个线程。

开启多个线程是为了同时运行多部分代码。
每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。
多线程好处:解决了多部分同时运行的问题。
多线程的弊端:线程太多回导致效率的降低。
其实应用程序的执行都是cpu在做着快速的切换完成的。这个切换是随机的。
JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。
1.执行main函数的线程,
该线程的任务代码都定义在main函数中。
2负责垃圾回收的线程。

如何创建一个线程呢?

创建线程方式一:继承Thread类。

步骤:
1. 定义一个类继承Thread类。
1. 覆盖Thread类中的run方法。
1. 直接创建Thread的子类对象创建线程。
1. 调用start方法开启线程并调用线程的任务run方法执行。

1. 调用run()方法

代码:

class ThreadDemo1 {public static void main(String[] args) {Thread1 t1 = new Thread1("小明");Thread1 t2 = new Thread1("xiango");t1.run();t2.run();}}class Thread1 extends Thread{private String name;Thread1(String name){this.name=name;}void show(){for (int i=0;i<10 ;i++ ) {System.out.println(name+"isrunning"+i);}}public void run(){show();}}class Thread2 extends Thread{private String name;Thread2(String name){this.name=name;}void show(){for (int i = 0;i<10 ;i++ ) {System.out.println(name+"............"+"isrunning"+i);}}public void run(){show();}}

运行结果

小明isrunning0小明isrunning1小明isrunning2小明isrunning3小明isrunning4小明isrunning5小明isrunning6小明isrunning7小明isrunning8小明isrunning9xiangoisrunning0xiangoisrunning1xiangoisrunning2xiangoisrunning3xiangoisrunning4xiangoisrunning5xiangoisrunning6xiangoisrunning7xiangoisrunning8

可以看到并没有随机执行,而是单个线程执行
那么如何实现真正意义上的多线程呢?
答案是调用start方法

2. 调用start()方法

java API 文档说明

startpublic void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。

        t1.run();        t2.run();

改为

        t1.start();        t2.start();

结果为

xiangoisrunning0小明isrunning0小明isrunning1小明isrunning2小明isrunning3xiangoisrunning1小明isrunning4xiangoisrunning2小明isrunning5xiangoisrunning3小明isrunning6xiangoisrunning4小明isrunning7xiangoisrunning5小明isrunning8xiangoisrunning6小明isrunning9xiangoisrunning7xiangoisrunning8xiangoisrunning9
3. 获取线程名称

可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)
主线程的名字就叫做main.

class ThreadDemo1  {    public static void main(String[] args)  {        Thread1 t1 = new Thread1("小明");        Thread1 t2 = new Thread1("xiango");        t1.start();        t2.start();        System.out.println("这是主线程"+Thread.currentThread().getName());    }}class Thread1 extends Thread{    private String name;    Thread1(String name){        this.name=name;    }    void show(){        for (int i=0;i<10 ;i++ ) {            System.out.println(name+"isrunning"+i+getName());        }    }    public void run(){        show();    }}class Thread2 extends Thread{    private String name;    Thread2(String name){        this.name=name;    }    void show(){        for (int i = 0;i<10 ;i++ ) {            System.out.println(name+"............"+"isrunning"+i+getName());        }    }    public void run(){        show();    }}

运行结果

这是主线程main小明isrunning0Thread-0小明isrunning1Thread-0小明isrunning2Thread-0小明isrunning3Thread-0小明isrunning4Thread-0小明isrunning5Thread-0小明isrunning6Thread-0xiangoisrunning0Thread-1xiangoisrunning1Thread-1xiangoisrunning2Thread-1小明isrunning7Thread-0小明isrunning8Thread-0小明isrunning9Thread-0xiangoisrunning3Thread-1xiangoisrunning4Thread-1xiangoisrunning5Thread-1xiangoisrunning6Thread-1xiangoisrunning7Thread-1xiangoisrunning8Thread-1xiangoisrunning9Thread-1
原创粉丝点击