zoukankan      html  css  js  c++  java
  • Java多线程学习

    首先给出进程和线程的概念,如果对这两个基本概念没有理解,没有办法对线程进行学习。进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOs中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

    用多线程只有一个目的,就是更好的利用CPU的资源。在这其中有一个重要的概念,线程安全:经常用来描绘一段代码。指在并发的情况之下,改代码经过多线程使用,线程的调度顺序不影响任何结果。这个时候使用多线程,我们只需要关注系统的内存,CPU是不是够用就可以了。线程安全的优先级高于性能。

    学习过程中,首先了解了线程的状态。我所学习的文章中着重提到了”Blocked”和”Waiting”这两个状态的区别,Blocked其实也是一种wait,等待的是monitor,但是和Waiting状态不一样,举个例子,有三个线程进入了同步块,其中两个调用了object.wait(),进入了waiting状态,这时第三个调用了object.notifyAll(),这时候前两个线程就一个转移到了Runnable,一个转移到了Blocked。

    接下来对机制进行了了解,java中的每个对象都有一个监测器,来监测并发代码的重入。在非多线程编码时该监测器不发挥作用,反之如果在synchronized范围内,监视器发挥作用。当某代码并不持有监视器的使用权时,会抛出异常。

    多线程的内存模型:main memory(主存)、working memory(线程栈),在处理数据时,线程会把值从主存load到本地栈,完成操作后再save回去(volatile关键词的作用:每次针对该变量的操作都激发一次load and save)。

    在文章末尾详细介绍了基本线程类,包括Thread类,Runnable接口,Callable接口。Thread类的最佳实践(Runnable与之类似):写的时候最好要设置线程名称 Thread.name,并设置线程组 ThreadGroup,目的是方便管理。在出现问题的时候,打印线程栈 (jstack -pid) 一眼就可以看出是哪个线程出的问题,这个线程是干什么的。Callable:future模式:并发模式的一种,可以有两种形式,即无阻塞和阻塞,分别是isDone和get。其中Future对象用来存放该线程的返回值以及状态。

    总结起来,对多线程有了一些初步的认识,为之后的学习打开了大门,找到了学习多线程的方向,这是java的基础部分,应该牢牢掌握,才能为以后的发展奠定良好基础。

                                                ----------部分内容节选自云时代架构公众号

  • 相关阅读:
    正则表达式的各种验证方法
    SQL SERVER常用函数
    Eclipse快捷键 10个最有用的快捷键
    jquery中选择器input:hidden和input[type=hidden]的差别
    JQuery 对 Select option 的操作
    非常好用的游戏数据保存类:ScriptableObject
    时间戳转换
    关于手机设备网络类型的判断
    compareTo的使用(实现排序功能)
    AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)
  • 原文地址:https://www.cnblogs.com/mqlblog/p/10507931.html
Copyright © 2011-2022 走看看