码迷,mamicode.com
首页 > 编程语言 > 详细

多线程知识基础

时间:2018-03-24 23:58:00      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:多线程   art   缺点   static   body   基本概念   xtend   效果   切换   

基本概念

  进程是一次任务的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,通俗点windows系统的每个运行的exe就是个进程,一个进程有多个线程组成

  线程可以理解成是进程中独立运行的子任务。

为什么使用多线程

  上面说线程是进程中独立运行的子任务,单线程时,也就是单任务的时候,每个任务是顺序执行的,同步的。比如有两个任务a和b,a任务是等待下载文件,时间是5s,CPU处于等待状态,b任务只需要1s,即使b任务是短短1s,也需要a的5s执行结束才能执行b。

  多线程时,CPU可以在任务a和任务b之间切换,使任务b并不需要等a执行完再执行,提高了系统运行效率,这就是多线程的优点,也就是异步。

 线程创建的方式

  方式一:继承Thread,缺点是java只支持单继承,其实看源码Thread类也是实现了Runnable接口

  方式二(建议):实现Runnable接口,一般使用这种方式(当类本身已经继承某类,则可使用实现接口这种方式)  

继承Thread方式

public class MyThread2 extends Thread{

    @Override
    public void run(){
        try {
            for(int i=0;i<10;i++){
                int time = (int) (Math.random() * 1000);
                Thread.sleep(time);
                System.out.println("run="+ Thread.currentThread().getName());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        MyThread2 myThread2 = new MyThread2();
        myThread2.start();//启动线程
        try {
            for (int i=0;i<10;i++){
                int time = (int) (Math.random() *1000);
                Thread.sleep(time);
                System.out.println("main="+Thread.currentThread().getName());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 运行结果

run=Thread-0
main=main
run=Thread-0
main=main
run=Thread-0
run=Thread-0
main=main
run=Thread-0
main=main
run=Thread-0
main=main
run=Thread-0
main=main
main=main
main=main
run=Thread-0
run=Thread-0
main=main
main=main
run=Thread-0

 

从运行结果看出来:代码运行结果和代码执行顺序无关,上面代码具有异步效果

Thread.start()方法才是启动一个线程,如果直接执行run(),其实相当于java中顺序执行一个方法

 

实现Runnable方式

public class MyRunnable implements Runnable {

    public void run() {
        System.out.println(Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("end!!");
    }
}

  

运行结果

end!!
Thread-0

  

线程实现只有这两种,但是表现形式多种

例1:

 
public static void main(String[] args) { Thread thread = new Thread(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName()); } }); thread.start(); System.out.println("end!!"); }

 例2:

public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("end!!");
}

  

 

多线程知识基础

标签:多线程   art   缺点   static   body   基本概念   xtend   效果   切换   

原文地址:https://www.cnblogs.com/moruoxuan/p/8486170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!