进程和线程.
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. 【转】并发编程之GCD

    http://blog.xcodev.com/blog/2013/11/04/gcd-intro/ Dispatch Queue Dispatch Queue是一个任务执行队列,可以让你异步或同步地执 ...

  2. HDU 5675 ztr loves math (数学推导)

    ztr loves math 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/A Description ztr loves re ...

  3. HDU 5680 zxa and set (数学 推导结论)

    zxa and set 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/G Description zxa has a set , ...

  4. iOS 将图片保存到本地

    //将图片保存到本地 + (void)SaveImageToLocal:(UIImage*)image Keys:(NSString*)key {     NSUserDefaults* prefer ...

  5. 数据持久化之sharedpreference的使用

    要将数据持久化到手机移动设备有多种方法,其中有一种是通过sharedpreference来实现. 首先将sharedpreference初始, private SharedPreferences sp ...

  6. ecshop以幻灯版调用首页主广告显示

    默认的是index_ad.lbi模板有一个$flash变量了,但在搜索搜索没发现 <!--{foreach from=$flash name=no item=flash}--> <l ...

  7. nrpe 在ubuntu上安装遇到的问题

    Nagios Linux客户端需要安装NRPE进行数据收集,如果在Ubuntu系统下安装过程中遇到下面的错误提示:checking for SSL libraries... configure: er ...

  8. IOS6 字体高亮显示

    ios6之前在一个字符串中如果也让某个字体高亮或者特殊显示(如: 关注[ ]),需要用单独一个的标签进行显示,或者利用CoreText进行字体绘绘制,非常麻烦: 现在IOS6 中TextView,la ...

  9. 【转】Watir, Selenium & WebDriver

    转自:http://watirmelon.com/2010/04/10/watir-selenium-webdriver/ Please also see my new ‘Watir-WebDrive ...

  10. delphi 文件或目录转换成 TreeView

    //文件或目录转换成 TreeViewprocedure DirToTreeView(Tree: TTreeView; Directory: string; Root: TTreeNode; Incl ...