进程和线程.
Eclipse,QQ都是进程.是程序或者任务的执行过程,是动态性.
持有资源(共享内存,共享文件)和线程. 这个资源就是内存.

每个程序在运行的时候都会分配一些内存.

Eclipse中的源代码文件编辑,源代码编译,语法校验.QQ中的文字聊天,收发文件都是对应的线程

进程是一个班级,班中每个学生都是一个线程.班中的学生中使用班级中的公共资源(座椅,粉笔等)

线程之间的通信(交互)有 互斥和同步.
类比到班级中就是,同一个班级中的学生进行的竞争和合作(同步).学习资料的竞争,班级活动中的合作.

java.lang 中的class Thread类和interface中的Runnable接口.
这两个中有一个共同的方法run()方法.

线程的创建:
Thread()
Thread(String name)
Thread(Runnable target)
Thread(Runnable target,String name)

线程的方法:
void start() 启动线程
static void sleep(long millis); 线程休眠
static void sleep(long millis,int nanos);线程休眠
void join() 使其他线程等待当前线程终止
void join(long millis);使其他线程等待当前线程终止
void join(long millis,int nanos);使其他线程等待当前线程终止
static void yield() 当前运行线程释放处理器资源

获取线程引用
static Thread currentThread() 返回当前运行的线程的引用

光说不练嘴把式!

代码演绎隋唐演义:

总共三个对象.
隋朝军队(军队:ArmyRunnable)和农民军队(英雄人物:KeyPersonThread).对应两个不同的线程.
还有一个舞台(Stage).

主要演员就是MrThread 和 Ms Runnable

Actor.java

 public class Actor extends Thread{
     public void run(){
         System.out.println(getName()+" 是一个演员!");
         int count = 0;//用来记录线程出现过多少次.
         boolean keepRunning = true;//作为线程运行的一个flag.
         while(keepRunning){
             System.out.println(getName()+" 登台演出"+(++count)+"次");
             if(count ==100){
                 keepRunning = false;
             }
             if(count%10==0){
                 try {
                     Thread.sleep(1000);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }
         System.out.println(getName()+" 的演出结束了!");
     }

     public static void main(String[] args) {
         Thread actor = new Actor();
         actor.setName("Mr Thread");
         actor.start();

         Thread actressThread = new Thread(new Actress(),"Ms.Runnable");
         //    Thread(Runnable target,String name)
         actressThread.start();
     }
 }
 class Actress implements Runnable{

     @Override
     public void run() {
         //实现Runnable接口的话是要用Thread.currentThread().getName()来获取当前线程的名字.
         System.out.println(Thread.currentThread().getName()+" 是一个演员!");
         int count = 0;//用来记录线程出现过多少次.
         boolean keepRunning = true;//作为线程运行的一个flag.
         while(keepRunning){
             System.out.println(Thread.currentThread().getName()+" 登台演出"+(++count)+"次");
             if(count ==100){
                 keepRunning = false;
             }
             if(count%10==0){
                 try {
                     Thread.sleep(1000);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }
         System.out.println(Thread.currentThread().getName()+" 的演出结束了!");
     }
 }

隋唐演义实战开发----军队.

隋唐演义实战开发----关键人物

如何停止线程:

stop

正确的停止java中的线程.
java中自带了一个stop方法
stop是java1.0中自带的停止线程的方式,但是随着时间的发展,人们发现他越来越多的缺点,最重要的就是使得我们的线程戛然而止.
我们甚至都不知道我们的线程完成了哪些工作,哪些工作还没有做.我们都没有机会去做一些清理的工作.
一个业务步骤(以一个for循环举例)都没有完成就停止(for循环中都没有到达一个i的结束条件时就结束)
连java官方也把stop()方法标注层了deprecate.
stop()方法不是一个正确的方法,不应该用它停止我们的线程.

停止线程的正确方法:

正确的方法---设置正确的旗标

如何停止线程,使用退出的标志.
上面用的stop()方法是一个业务步骤(以一个for循环举例)都没有完成就停止(for循环中都没有到达一个i的结束条件时就结束).
我们想要的是结束这个线程最起码完成一个业务(for循环中循环到的i值不能到任意就停止,而是至少要到达i该结束循环条件的时候)

停止线程广为流传的错误方法---interrupt()

interrupt()方法也不是用来停止线程的,初衷并不是停止线程.

这个地方有三个方法要注意区别:
void interrupt() 中断线程
static boolean interrupted() 测试当前线程是否已经中断
boolean isInterrupted() 测试线程是否已经中断。

interrupt()方法其实质还是用的退出"旗标"的方式.

当线程进入阻塞状态(sleep)的时候此时再被调用interrupt()方法的时候.
此时会产生两个结果,一是中断状态被清除,Thread线程的isInterrupted()方法就不能返回一个正确的是否被中断的状态.
代码中的while(!isInterrupted())就不能正确的退出了.第二个是sleep()会收到一个InterruptedException();
所以说Interrupted()不是一个正确的退出线程的方式,还是推荐用"退出旗标"的方式,不过修改代码还是可以正确的退出线程的.
(老师这个地方留作作业了)

WrongWayStopThread.java

=========未完待续===========

[未完成][Mooc]关于线程的总结的更多相关文章

  1. [未完成][Mooc]关于IO总结

    整个课程的大纲:1.编码问题.2.File类的使用3.RandomAccessFile的使用4.字节流的使用.5.字符流的使用.6.对象的序列化和反序列化. 视频1:文件的编码Eclipse的一大特点 ...

  2. [未完成][Mooc]关于Linxu的总结(一)

    视频1:Linux之前有个Minix(这个是一个教授用来教学用的)开源的,不是编译过的,不能通过QQ.exe找到其源码.后来Linus这个家伙搞了一个Linux.服务器领域超过百分之八十.linux是 ...

  3. ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?

    前言 事情不太多时,会时不时去看项目中同事写的代码可以作个参考或者学习,个人觉得只有这样才能走的更远,抱着一副老子天下第一的态度最终只能是井底之蛙.前两篇写到关于断点传续的文章,还有一篇还未写出,后续 ...

  4. 高并发WCF配置

    在使用WCF做服务接口时,TCP模式肯定比Http效率高,Binary/MTOM格式的绑定也会Text格式的绑定高效. 两个endpoint,一个用来调试:ms-mex的binding是用来方便WCF ...

  5. python爬虫抓网页的总结

    python爬虫抓网页的总结 更多 python 爬虫   学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自 ...

  6. Quartz的misfire特性

    Quartz的misfire特性 只有一个线程.多个job 第一个job产生misfire(executeTime>Interval) 且是repeatForever 那么只会运行第一个job, ...

  7. 爬虫总结_python

    import sqlite3 Python 的一个非常大的优点是很容易写很容易跑起来,缺点就是很多不那么著名的(甚至一些著名的)程序和库都不像 C 和 C++ 那边那样专业.可靠(当然这也有动态类型 ...

  8. python爬虫抓站的一些技巧总结

    使用python爬虫抓站的一些技巧总结:进阶篇 一.gzip/deflate支持现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45 ...

  9. 使用python爬虫抓站的一些技巧总结:进阶篇

    Reference:http://python.jobbole.com/82000/ 一.gzip/deflate支持 现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页 ...

随机推荐

  1. Hadoop port to Jxta P2P Framework

    https://www.java.net/forum/topic/jxta/jxta-community-forum/hadoop-port-jxta-p2p-framework —————————— ...

  2. MANACHER---求最长回文串

    求最长回文串,如果是暴力的方法的话,会枚举每个字符为中心,然后向两边检测求出最长的回文串,时间复杂度在最坏的情况下就是0(n^2),为什么时间复杂度会这么高,因为对于每一个作为中心的字符的检测是独立的 ...

  3. Codeforces Round #353 (Div. 2) C. Money Transfers (思维题)

    题目链接:http://codeforces.com/contest/675/problem/C 给你n个bank,1~n形成一个环,每个bank有一个值,但是保证所有值的和为0.有一个操作是每个相邻 ...

  4. cocos2d-x 纹理源码分析

    转自:http://blog.csdn.net/honghaier/article/details/8068895 当一张图片被加载到内存后,它是以纹理的形式存在的.纹理是什么东西呢?纹理就是一块内存 ...

  5. Apache POI 合并单元格

    合并单元格所使用的方法: sheet.addMergedRegion( CellRangeAddress  cellRangeAddress  );   CellRangeAddress  对象的构造 ...

  6. 正则表达式从右往左进行匹配(Regex)

    #匹配最末两位为数字 $x=New-Object regex ('\d{2}','RightToLeft') #$x.RightToLeft $x.Match('abcd22') 结果:

  7. 使用EA逆向生成数据库E-R图

    1. 创建ODBC数据源 2. 逆向工程

  8. C#实现汉字转换为拼音缩写的代码

    using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Secu ...

  9. Delphi 多文件拖放获取路径示例

    unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...

  10. Struts2之异常处理

    一.学习案例:通过在input.jsp页面输入登录账号和password測试异常处理机制. 二.案例分析:struts2提供了局部异常处理机制和全局异常处理机制.局部优先于全局异常处理,当异常找不到局 ...