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

最新文章

  1. Spring学习记录(九)---通过工厂方法配置bean
  2. jQuery对象与JS原生dom对象之间的转换
  3. MongoVUE 如何导出数据
  4. 大坑!常被忽视又不得不注意的小细节——%I64,%lld与cout(转载)
  5. rsyslog 一重启就会开始同步之前所有通配的日志文件
  6. js 保留两位小数 多位小数(javascript)
  7. Python多线程(threading模块)
  8. java中驼峰与下横线格式字符串互转算法
  9. Servlet基础知识(四)——Servlet过滤器Filter
  10. Scala actor的使用
  11. c++编译错误C2971:"std::array":array_size:包含非静态存储不能用作废类型参数;参见“std::array”的声明
  12. 【Spark篇】---Spark中Action算子
  13. CCF-201803-3-URL映射(模拟)
  14. ThinkPHP5.0.21&5.1.* 代码执行和命令执行漏洞利用
  15. Arrays.asList中所遇到的坑
  16. matlab 设定坐标比例
  17. jsp el的内置对象
  18. 引入css少引入了rel="stylesheet" 这行代码。导致整个页面空白、
  19. node升级更新最近稳定版
  20. javaweb(八)——HttpServletResponse对象(二)

热门文章

  1. struts2学习笔记(二)—— struts2的架构【转】
  2. href="#" 链接到当前页面
  3. bzoj3261: 最大异或和 (可持久化trie树)
  4. 洛谷 P3616 富金森林公园题解(树状数组)
  5. Qt随笔 - QSettings
  6. C++ GUI Qt4编程(13)-6.2preferencedialog
  7. 1.3 js基础
  8. lua 遍历table
  9. JS常用的设计模式(5)——代理模式
  10. [转] .net core Session , Working with a distributed cache