前言:
    现在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的操作
 
    

多线程(一)~基础介绍,简单demo实现的更多相关文章

  1. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  2. Java多线程系列--“基础篇”04之 synchronized关键字

    概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...

  3. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

    概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...

  4. Java多线程系列--“基础篇”07之 线程休眠

    概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http:// ...

  5. Java多线程系列--“基础篇”10之 线程优先级和守护线程

    概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skyw ...

  6. jQuery之基础核心(demo)

    jQuery之基础核心     作者的热门手记 jQuery之基础核心(demo)   本文主要简单的介绍下jQuery一些基础核心,大致了解jQuery使用模式.适用于有HTML.CSS.javas ...

  7. iOS系统及客户端软件测试的基础介绍

    iOS系统及客户端软件测试的基础介绍 iOS现在的最新版本iOS5是10月12号推出,当前版本是4.3.5 先是硬件部分,采用iOS系统的是iPad,iPhone,iTouch这三种设备,其中iPho ...

  8. Web服务基础介绍

    Web服务基础介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正常情况下的单次web服务访问流程 博主推荐阅读: https://www.cnblogs.com/yinzh ...

  9. C#多线程之基础篇3

    在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...

  10. Spring的简单demo

    ---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...

随机推荐

  1. Python + gevent模块对单个接口进行并发测试 1

    本文知识点 利用gevent模块进行并发测试 代码如下 from gevent import monkey monkey.patch_all() import requests import geve ...

  2. JAVA数据结构--LinkedList双向链表

    链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分: ...

  3. vm 中安装 CentOS7

    第三步:安装ISO文件 1.在vm下,文件,新建虚拟机 在我的机算机中,选中刚命名的CentOS7,右键,属性 2.开启虚拟机 PS: 打开虚拟机之后,提示了一个小错误,LZ根据错误提示,到BIOS里 ...

  4. [转] spring JdbcTemplate 查询,使用BeanPropertyRowMapper

    [From] http://blog.csdn.net/limenghua9112/article/details/45096437 应用: 使用Spring的JdbcTemplate查询数据库,获取 ...

  5. 【实战】简述一次挖XSS的经历

    值守尤其是夜班真的是件痛苦的事情呀,献给还在值守岗位上奋斗的小伙伴们. 简单试了前面几个参数,发现c0-id这个参数值在响应包里有回显,截图如下: 把c0-id参数值改为xss,响应包内容也随之变化, ...

  6. Flutter FormatException: Bad UTF-8 encoding 0xc3 (at offset 172)

    是文件编码问题. 1,打开 Android Studio 进入设置界面 Ctrl + Alt + S 或 File --> Settings 打开如下界面: 2,将 Project Encode ...

  7. Git merge 和 rebase 进一步比较

    但是 假如 我不想看到 分支转折点呢 合并的分支始终会存在一个交叉点 Microsoft Windows [版本 10.0.17134.345] (c) Microsoft Corporation.保 ...

  8. gulp打包js

    在终端定位到你要创建目录的地方,输入 sudo mkdir js 创建文件夹,这个文件夹就是放你要压缩js文件的地方 输入 sudo vim gulpfile.js 这个js就是写gulp所有的配置信 ...

  9. oracle 基础知识(十一)----表空间结构

    一,逻辑结构图 二.tablespace 01,Oracle表空间 它是一个逻辑的概念,它在物理上是不存在的. 02,oracle 存储结构 03.表空间特性 一个数据库可以包含多个表空间,一个表空间 ...

  10. 【LDAP】ldap目录服务的命名模型

    ldap的命名模型 命名模型规定了在目录中如何组织和表示条目 1.   目录信息树(DIT) 目录信息树有点类似于DNS的结构.每一个条目都有自己的父条目(因为主条目的父条目是top,所以这句话是成立 ...