美文网首页Java 杂谈Java学习笔记技术干货
Java 并发编程(一)多线程基础

Java 并发编程(一)多线程基础

作者: 爱迪生玛玛 | 来源:发表于2017-05-25 16:55 被阅读99次

    注意

    以下内容源自互联网相关资料及本人学习与工作经验,仅为学习及技术分享所用,切勿用于商业用途,转载请注明出处。

    1. 进程与线程

    软件开发的初学者经常搞不清楚这两个概念的区别

    • 进程:进程指的是拥有独立内存空间的应用程序执行过程。通俗点讲,每一个应用程序就是一个进程(或者进程树),比如您电脑上启动着的QQ、迅雷、种子搜索器等等,这些运行着的程序都是独占部分内存资源的,相互之间不影响(不会因为QQ崩溃了,您的迅雷就下不了片子)。
    • 线程:在一个进程中,每个独立的功能都需要独立的去运行,这时又需要把当前这个进程划分成多个运行区域,每个独立的小区域(小单元)称为一个线程。一个进程至少要有一个线程,由线程来具体运行进程中某个逻辑功能。比如迅雷下载任务会启动多个线程,分别下载同个下载源的不同文件片,再启动一个线程将这些文件片聚集成一个完整的文件。
    • 多线程:在一个进程中,我们同时开启多个线程,让多个线程同时去完成某些任务。比如后台服务系统,就可以用多个线程同时响应多个客户的请求,起到提高运行效率的作用。

    2. 多线程的运行原理

    当我们的程序启动多个线程去完成一个任务时,比如启动多个线程,并发下载文件。感觉上这些线程是在同时运行的,但事实上并非如此。线程的运行是与CPU息息相关的。CPU是负责计算的电脑核心组件,也就是说只有得到CPU资源,我们的线程才能够执行。假设我们的电脑只有一个CPU,那么很明显,多线程必须去竞争这个CPU,谁得到CPU时间片,谁会可以执行,然后时间片用完,暂停执行,再次竞争,依此循环。由于CPU切换任务时间太快,肉眼无法区别,就造成了多线程同时运行的假象。

    3. Java中实现线程的两种方式

    3.1 继承Thread

    创建一个新的类继承Thread类,重载run方法,run方法中是具体的调用逻辑。启动线程时,只需要调用new方法构建一个该线程类的对象,然后调用start方法就可以启动了。启动后的线程是独立于主线程的。代码如下:

    public class MyThreadWithExtends extends Thread {
        @Override
        public void run() {
            System.out.println("使用继承Thread方式启动线程");
            
        }
    
        public static void main(String[] args) {
            Thread thread1 = new MyThreadWithExtends("a");
            thread1.start();
        }
    }
    
    

    注意调用Thread对象的run方法和start方法的区别:
    调用run方法,则只是一个普通的方法调用,不会开启新的线程,还是运行在主线程中。

    3.2 实现Runnable接口

    创建一个新的类实现Runnable接口,实现run方法,启动线程时,调用new Thread(Runnable r)构建一个线程类对象,调用start方法启动。代码如下:

    public class MyThreadWithImpliment implements Runnable {
        
        @Override
        public void run() {
            System.out.println("使用实现Runnable方式启动线程");
        }
    
        public static void main(String[] args) {
            Thread thread1 = new Thread(new MyThreadWithImpliment(), "thread-1");
            // 可指定线程名为thread-1
                    thread1.start();
        }
    }
    

    相关文章

      网友评论

        本文标题:Java 并发编程(一)多线程基础

        本文链接:https://www.haomeiwen.com/subject/zkewxxtx.html