• 多线程(一)~基础介绍,简单demo实现


     
        前言:
        现在CPU都是多核的,可以同时处理多个进程,比如我笔记本的CPU是i3-370,它就是双核四线程的。那么这个核和线程都是什么呢?
        核是针对硬件而言的,即核心,代表的是有多少个核心芯片。
        线程是处理程序的基本单位,说到线程就要先介绍一下进程。举个例子吧:比如我的windows系统,需要同时开启QQ、eclipse等应用程序。QQ和eclipse在任务管理器中就有自己的进程,而每一个进程又包含多个线程,有的线程处理消息接收、有的线程处理语音视频等等。
     
        用途:
        比如我的程序同时要执行两个任务,如果单线程执行的话,效果是:
     
        
        如果多线程执行的话,效果是:
     
     
        由此可见,多线程处理任务的能力更强一些,也更节约时间。
        OK,接下来我们看一下java中多线程的实现方式。
     
    多线程入门:
        在java中实现多线程的方式有以下两种:
            1.继承java.lang.Thread类,实现run()即可。
            2.实现java.lang.Runnable接口,实现run()即可。注意:这块涉及到一个基础问题,java只支持单继承,所以还是采用实现接口比较好。
        
        ①.继承java.lang.Thread类
    1. package com.multiThread.bean;
    2. publicclassMyThreadClassextendsThread{
    3. @Override
    4. publicvoid run(){
    5. System.out.println("继承java.lang.Thread类");
    6. }
    7. }
        ②.实现java.lang.Runnable接口
    1. package com.multiThread.bean;
    2. publicclassMyRunnableClassimplementsRunnable{
    3. @Override
    4. publicvoid run(){
    5. System.out.println("实现java.lang.Runnable接口");
    6. }
    7. }
        ③.测试类
    1. package com.multiThread.test.common;
    2. import com.multiThread.bean.MyRunnableClass;
    3. import com.multiThread.bean.MyThreadClass;
    4. publicclassTest{
    5. publicstaticvoid main(String[] args){
    6. //继承java.lang.Thread类
    7. Thread thread1 =newMyThreadClass();
    8.         //告知线程规划器,此线程可以执行了
    9. thread1.start();
    10. //实现java.lang.Runnable接口
    11. MyRunnableClass myRunnableClass =newMyRunnableClass();
    12. //创建Thread对象,传入Runnable接口的实现类对象
    13.         Thread thread2 =newThread(myRunnableClass);
    14.         //告知线程规划器,此线程可以执行了
    15. thread2.start();
    16. }
    17. }
        输出日志
    1. 继承java.lang.Thread
    2. 实现java.lang.Runnable接口
     
     
    这里注意thread对象除了有start()之外,还有run(),这个地方必须调用start(),这两个方法的区别是:
        run():使用main线程同步执行线程的操作
        start():通知线程规划器此线程准备就绪可以执行,具体什么时间执行需要等cpu调度
     
    OK,简简单单介绍下来源、用途,写个小demo,第一章就这样告一段落吧。
    到这里我们只看到了多线程的冰山一角,后面还有需需要多大的事情要处理,比如控制线程安全问题,不能出现脏读;保证程序设计的严密性,避免死锁的出现……我们循序渐进吧
    下一章我们来看一下线程安全的问题以及对java.lang包下Thread类相关API的操作
     
        





  • 相关阅读:
    模块入门–搜索
    [hadoop源码阅读][2]package结构
    [hadoop源码阅读][8]datanodeDataStorage
    [hadoop源码阅读][4]org.apache.hadoop.io
    [hadoop源码阅读][6]org.apache.hadoop.ipcprotocol和心跳分析
    [hadoop源码阅读][1]源码目录结构
    [hadoop源码阅读][4]org.apache.hadoop.io.compress系列3使用压缩
    [hadoop源码阅读][3]新旧api区别
    [hadoop源码阅读][6]org.apache.hadoop.ipcipc总体结构和RPC
    [hadoop源码阅读][8]datanodeFSDataset
  • 原文地址:https://www.cnblogs.com/douJiangYouTiao888/p/6473793.html
Copyright © 2020-2023  润新知