多线程,多线程分享

    今天下午的双周会,轮到了我分享,我给大家分享的是多线程,个人平时也比较喜欢弄这个东西;我这里没有给大家说线程是什么,我的思路是通过讲解关键字,再通过实例来讲解各关键字的使用,以及后面的巩固练习,讲得比较浅,都是一些基本知识。
    这里YY一下,那就是阿里的分享气氛非常好,就是大家都愿意分享,都能够分享,彼此学习,大家共同提高,如了进入正题了。
    一、多线程相关关键字
    Runnable、Thread:线程的父类,区别就是使用Runnable接口不可以使用Thread的相关的特性,如sleep等;
    run:线程类中必须存在的方法;
    start:启动一个线程,经常被面试的人提到,我很郁闷;
    wait:先休息休息,好了的时候再叫我,但别忘了先锁门哦;
    notify:让一个等待的线程活动起来,效率高点;
    notifyAll:让所有等待的线程都起来抢东西了,但我更安全;
    sleep:先休息休息,一会儿自己醒来,除非你不让我休息了;
    interrupt:休息这以久还没有等到,不等了,但是不是中断这个线程;
    setDaemon:守护线程,请不要在乎我的存在,我是为主人服务的;
    join:等等,好了再继续;
    ThreadLocal:多线程我也不怕共享资源。
    Volatile:参看Java 理论与实践: 正确使用 Volatile 变量
    二、实例
    1、我是一个线程,展示一个简单的线程是怎么样练成的:
   
    2、休息休息再说,这个是对sleep的简单使用,休息指定的时间后再工作,这里的时间设的长,是因为3要使用到它:
   
    3、睡醒了吧,懒虫,不要一直让他沉睡,过2秒钟醒他一下,“工作”后,再继续睡,然后再过2秒钟再弄醒一下...如些循环,这里需要注意一下方法interrupt(),不要把这个理解为中断线程,理解为把当程线程唤醒更贴切:
   
    4、饭好了叫我,对wait的使用示例,将线程放入到虚拟的wait set中,当对线程使用wait时,但是要想使用wait等待线程,需要注意两点,一是必须要获取锁定,如这里的synchroinzed关键字,二是必须要有notify()或notifyAll()方法来叫醒,否则线程会永远醒不过来:
   
    5、Join,全部好了再走,JOIN的使用情况是要获取到一个线程或者多个线程执行结果后,再继续执行下面的步骤,如果用采用JOIN,也许启动的线程还没有执行完毕,JVM就退出了;既然JVM可以等到线程执行完后再继续下面的步骤,我们可否使用JOIN来做分布式运算,这个你自己想哦:
   
    6、守护线程,JVM不需要依赖于守护线程是否执行完毕来确定是否退出,他的优先级很低,如垃圾收集集,待其它的线程需要执行时,袒护线程就会等其它线程执行,如果全部执行完了,虚拟机不会在意守护线程是否还有任务在执行,都会退出。简单的理解为守护线程为家仆,其它线程为主人,只需要看主人的脸色,而不会在科家仆的脸色,主人完了,那家仆完不完已经不重要了:
   
    7、ThreadLocal,用于在线程中传递变量
    只有四个方法:
    get() 返回此线程局部变量的当前线程副本中的值。
    initialValue() 返回此线程局部变量的当前线程的“初始值”。只在get或set时执行一次
    remove() 移除此线程局部变量当前线程的值。
    set(T value) 将此线程局部变量的当前线程副本中的值设置为指定值。
   
    三、一个巩固实例
    这个实例是别人发到JAVAEYE上面的,我看的蛮有意思的,就贴在这里,
   
    如果没有看明白,就去看这个贴子吧:
    http://www.javaeye.com/topic/964712
    有人褒,有人贬,看你怎么看了,最重要的是,学到东西才是最重要的
Tags:  mfc多线程 vc多线程 多线程编程 java多线程 多线程

延伸阅读

最新评论

发表评论