Java 多线程 (转)
http://www.ibm.com/developerworks/cn/java/j-thread/index.html
http://www.ibm.com/developerworks/cn/java/multithreading/index.html
http://www.ibm.com/developerworks/cn/education/java/j-threads/j-threads.html
线程的概念基本清楚, 关键是访问共享变量时, 一定要注意.
volatile: 对于简单变量, 使用 volatile 关键字就够了, 表示同步变量, 在多个线程中访问了 volatile时, 必须保证所有访问该变量的地方都使用了同步. 这个还是很有用的, 比如你开启了100个线程, 都在跑着, 而你想通过一个标记变量来关闭这些线程, 那么这个变量就可以实现.
线程的创建, 要么 extends Thread, 要么 实现 Runnable 接口
1. 通过继承 Thread 创建线程
2. 通过 Runnable 接口创建线程
此接口只有一个函数,run(),此函数必须由实现了此接口的类实现。但是,就运行这个类而论,其语义与前一个示例稍有不同, 我们可以用runnable 接口改写前一个示例。(不同的部分用黑体表示。)
请注意,当使用 runnable接口时,您不能直接创建所需类的对象并运行它;必须从 Thread类的一个实例内部运行它。许多程序员更喜欢runnable 接口,因为从Thread 类继承会强加类层次.
线程的启动, start()
线程的结束, run() 执行完了, 或者 抛出异常, 或者 另一个线程调用一个弃用的 stop() 方法. (stop方法已经不提倡使用)
加入线程, join()方法, 当调用 Thread.join()
时,调用线程将阻塞,直到目标线程完成为止。
休眠, 当前线程进入等待状态, sleep()方法, 直到过了一段时间, 或者 另一个线程对当前线程的 Thread 对象调用了 interrupt() 方法, 从而终端了这个等待的线程, 如果线程是由对 Thread.interrupt()的调用而终端的, 那么休眠的线程会抛出 InterruptedException, 这样线程就知道它是由中断唤醒的,就不必查看计时器是否过期.
Thread.yield() 同 sleep 一样, 它并不引起休眠,而只是暂停当前线程片刻,这样其它线程就可以运行了, 在大多数实现中,当较高优先级的线程调用 Thread.yield()
时,较低优先级的线程就不会运行.
同步: Synchronized
有两个重要含义:它确保了一次只有一个线程可以执行代码的受保护部分, 而且它确保了一个线程更改的数据对于其它线程是可见的.
锁: 每个 Java 对象都有一个相关的锁。同一时间只能有一个线程持有 Java 锁。当线程进入 synchronized
代码块时,线程会阻塞并等待,直到锁可用,当它可用时,就会获得这个锁,然后执行代码块.当控制退出受保护的代码块时, 即到达了代码块末尾或者抛出了没有在 synchronized块中捕获的异常时,它就会释放该锁。
创建 synchronized
块的最简单方法是将方法声明成 synchronized
。这表示在进入方法主体之前,调用者必须获得锁:
什么时候不需要同步
在某些情况中,您不必用同步来将数据从一个线程传递到另一个,因为 JVM 已经隐含地为您执行同步。这些情况包括:
- 由静态初始化器(在静态字段上或
static{}
块中的初始化器)初始化数据时 - 访问 final 字段时
- 在创建线程之前创建对象时
- 线程可以看见它将要处理的对象时
Java 多线程 (转)的更多相关文章
- 40个Java多线程问题总结
前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...
- Java多线程基础知识篇
这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- Java多线程系列--“JUC锁”04之 公平锁(二)
概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...
- Java多线程--让主线程等待子线程执行完毕
使用Java多线程编程时经常遇到主线程需要等待子线程执行完成以后才能继续执行,那么接下来介绍一种简单的方式使主线程等待. java.util.concurrent.CountDownLatch 使用c ...
- Java多线程 2 线程的生命周期和状态控制
一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...
- java 多线程 1 线程 进程
Java多线程(一).多线程的基本概念和使用 2012-09-10 16:06 5108人阅读 评论(0) 收藏 举报 分类: javaSE综合知识点(14) 版权声明:本文为博主原创文章,未经博 ...
- 一起阅读《Java多线程编程核心技术》
目录 第一章 Java多线程技能 (待续...)
- 第一章 Java多线程技能
1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...
- java从基础知识(十)java多线程(下)
首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 ...
随机推荐
- php如何支持实现多线程并发
<?php if(function_exists('date_default_timezone_set')) { date_default_timezone_set('PRC'); } func ...
- android 系统相册调用,各版本的区别总结
请求系统相册有三个Action: (注意以下 图库(缩略图) 和 图片(原图) 的区别) ACTION_OPEN_DOCUMENT 仅限4.4或以上使用 默认打开原图 ACTION_ ...
- 每日一九度之 题目1043:Day of Week
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7336 解决:2563 题目描述: We now use the Gregorian style of dating in Russia. ...
- handler以及AnyscTask处理机制
1.Handler 主文件:MainActivity.java package com.example.asynctaskdownload; import java.io.IOException; i ...
- 多校6-Key Set 2015-08-09 20:35 2人阅读 评论(0) 收藏
Key Set Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Sub ...
- 周赛-Killing Monsters 分类: 比赛 2015-08-02 09:45 3人阅读 评论(0) 收藏
Killing Monsters Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 编译器错误消息: CS0016: 未能写入输出文件“c:/Windows/Microsoft.NET/Framework/v2.0.50727/....dll”--“拒绝访问。
错误如下: “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入 ...
- WPF中父子窗口的层次关系
关于子窗体的层级关系总结一下哈,希望能对大家有些帮助 假设有这样两个窗体:RootWindow,SubWindow,在RootWindow中引发某事件而显示SubWindow 1,如果弹出窗体(比如S ...
- 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)
[项目管理和构建]十分钟教程,eclipse配置maven + 创建maven项目(三) 上篇博文中我们介绍了maven下载.安装和配置(二),这篇博文我们配置一下eclipse,将它和maven结合 ...
- VC++界面编程之--阴影窗口的实现详解
转载:http://blog.csdn.net/rmxming/article/details/11661365 对于我们这些控件狂来说,窗口阴影也是一个必不可少的实现需求.虽说其没多大用,但对于增加 ...