Java中线程用法总结
本文实例总结了Java中线程用法。分享给大家供大家参考。具体分析如下:
1.线程是基本调度单元。共享进程的资源,如内存和文件句柄。但有自己的pc(程序计数器),stack(线程栈)及本地变量
2.线程的优势:
a) 充分利用多处理器
b) 可以简化模型。特定任务给特定线程。如servlets及rmi等框架。
c) 对异步事件的简单处理。如socket,nio使用更复杂。而现在的操作系统支持更大数量的线程。
d) 界面的更佳响应
3.内部锁:synchronized块。互斥。可重入(reentrancy),这样的设计可以避免死锁
4.内存可见性:因为编译器的优化,线程并不和你看到的一样。
public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread { public void run() { while (!ready) Thread.yield(); System.out.println(number); } } public static void main(String[] args) { new ReaderThread().start(); number = 42; ready=true; } }
可能打印0,或者一直循环。因为重排序了
5.volatile:可以解决内存可见性,对syncronized性能更佳,但仅此而已,如不能保证a++的原子性
6.溢出(escape):不要在构造函数中将this指针溢出。不要将内部变量溢出,如:
class Test { private String[] list = new String[] {}; public String[] getList() {return list;} }
7.线程封闭:把对象封闭在一个线程中,无论对象是否是线程安全的,都能保证线程安全
a) statck限制。即只有本地变量能访问该对象。
b)ThreadLocal。
8.不可变对象。一定是线程安全的。不可变对象必须满足:
a) 状态不能在创建后修改。
b) 所以的域都是final
c) 正确创建对象,没有this指针溢出
9.安全发布
a) 通过static初始化对象
b) 使用volatile或AtomicReference
c) 将引用存储于正确创建的对象的final域
d) 使用锁
希望本文所述对大家的java程序设计有所帮助。
相关推荐
-
Java中instanceof关键字的用法总结
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: result = object instanceof class 参数: Result:布尔类型. Object:必选项.任意对象表达式. Class:必选项.任意已定义的对象类. 说明: 如果 object 是 class 的一个实例,则 instanceof 运算符返回 true.如果 object
-
Java中channel用法总结
本文实例总结了Java中channel用法.分享给大家供大家参考.具体分析如下: 1.Channel接口的定义: public interface Channel { public boolean isOpen( ); public void close( ) throws IOException; } 2.Channel的常见类型: FileChannel, SocketChannel, ServerSocketChannel, and DatagramChannel: FileChannel
-
Java接口和抽象类用法实例总结
本文实例讲述了Java接口和抽象类用法.分享给大家供大家参考,具体如下: 接口 1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口. 2 接口里面的成员变量默认都是public static final类型的.必须被显示的初始化. 3 接口里面的方法默认都是public abstract类型的.隐式声明. 4 接口没有构造方法,不能被实例化. 5 接口不能实现另一个接口,但可以继承多个接口. 6 类如果实现了一个接口,那么必须实现
-
Java中Executor接口用法总结
本文实例讲述了Java中Executor接口用法.分享给大家供大家参考.具体如下: 1.Java中Executor接口的定义 public interface Executor { void execute(Runnable command); } 2.Executors以下静态工厂方法创建一个线程池: a) newFixedThreadPool:创建一个定长的线程池.达到最大线程数后,线程数不再增长. 如果一个线程由于非预期Exception而结束,线程池会补充一个新的线程. b) newCa
-
java中hashCode方法与equals方法的用法总结
首先,想要明白hashCode的作用,必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重复:后者元素无序,但元素不可重复. 那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢? 这就是Object.equals方法了.但是,如果每增加一个元素就检查一次,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了. 也就是说,如果集合中现在已经有
-
java中String的常见用法总结
1>获取 1.1:字符串中包含的字符数,也就是字符串的长度. int length():获取长度 1.2:根据位置获取位置上某个字符. char charAt(int index) 1.3:根据字符获取该字符在字符串中的位置. int indexOf(int ch):返回的是ch在字符串中第一次出现的位置. int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置. int indexOf(String str)
-
Java经典用法总结(二)
接着上一篇再为大家介绍java应用和输入输出常用方法,供大家参考,具体内容如下 一.应用 1.使用StringBuilder或StringBuffer // join(["a", "b", "c"]) -> "a and b and c" String join(List<String> strs) { StringBuilder sb = new StringBuilder(); boolean first
-
Java中泛型的用法总结
本文实例总结了Java中泛型的用法.分享给大家供大家参考.具体如下: 1 基本使用 public interface List<E> { void add(E); Iterator<E> iterator(); } 2 泛型与子类 Child是Parent的子类,List<Child>却不是List<Parent>的子类. 因此:List<Object> list = new ArrayList<String>()是错误的. 如果上面
-
Java中线程用法总结
本文实例总结了Java中线程用法.分享给大家供大家参考.具体分析如下: 1.线程是基本调度单元.共享进程的资源,如内存和文件句柄.但有自己的pc(程序计数器),stack(线程栈)及本地变量 2.线程的优势: a) 充分利用多处理器 b) 可以简化模型.特定任务给特定线程.如servlets及rmi等框架. c) 对异步事件的简单处理.如socket,nio使用更复杂.而现在的操作系统支持更大数量的线程. d) 界面的更佳响应 3.内部锁:synchronized块.互斥.可重入(reentra
-
Java中线程的等待与唤醒_动力节点Java学院整理
wait(), notify(), notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口.wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁.而notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程:notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程. Object类中关于等待/唤醒的API详细信息如下: notify()
-
Java守护线程用法实例分析
本文实例讲述了Java守护线程用法.分享给大家供大家参考,具体如下: 一 点睛 针对守护线程,只要有一个用户线程在执行,这个进程就不会结束. 当线程中只剩下守护线程时,JVM会自动退出,反之,如果还有其他任何用户线程存在,JVM都不会退出. 二 代码 public class ThreadDaemon { public static void main( String args[] ) { ThreadTest t = new ThreadTest(); Thread tt = new Thre
-
Java中synchronized用法汇总
目录 用法简介 1.修饰普通方法 2.修饰静态方法 3.修饰代码块 总结 在 Java 语言中,保证线程安全性的主要手段是加锁,而 Java 中的锁主要有两种:synchronized 和 Lock,我们今天重点来看一下 synchronized 的几种用法. 用法简介 使用 synchronized 无需手动执行加锁和释放锁的操作,我们只需要声明 synchronized 关键字就可以了,JVM 层面会帮我们自动的进行加锁和释放锁的操作.synchronized 可用于修饰普通方法.静态方法和
-
Java 中This用法的实例详解
Java 中This用法的实例详解 用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法. 那们类里面是够也应该有一个引用来访问自己的属性和方法纳? 呵呵,Java提供了一个很好的东西,就是 this 对象,它可以在类里面来引用这个类的属性和方法.先来个简单的例子: public class ThisDemo { String name="Mick"; public void print(String name){ System.out.pr
-
Java中getResourceAsStream用法分析
本文实例讲述了Java中getResourceAsStream用法.分享给大家供大家参考.具体如下: (一)Java中的getResourceAsStream有以下几种情况: 1. Class.getResourceAsStream(String path) : #path 不以'/'开头时默认是从此类所在的包下取资源: #以'/'开头则是从ClassPath根下获取,其原理是通过path构造一个绝对路径,最终还是由ClassLoader来获取资源. 2. Class.getClassLoade
-
Java中线程的基本方法使用技巧
java中线程的基本方法的熟练使用是精通多线程编程的必经之路,线程相关的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文浅要的介绍一下它们的使用方式. 线程的状态图 java将操作系统中的就绪和运行两种状态统称为可运行状态,java中线程的状态可以认为有以上六种. wait 调用该方法的线程进入WAITING状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用wait()方法后,会释放对象的锁. 因此,wait方法一般用在同步方法或同步代码
-
java 中线程等待与通知的实现
java 中线程等待与通知的实现 前言: 关于等待/通知,要记住的关键点是: 必须从同步环境内调用wait().notify().notifyAll()方法.线程不能调用对象上等待或通知的方法,除非它拥有那个对象的锁. wait().notify().notifyAll()都是Object的实例方法.与每个对象具有锁一样,每个对象可以有一个线程列表,他们等待来自该信号(通知).线程通过执行对象上的wait()方法获得这个等待列表.从那时候起,它不再执行任何其他指令,直到调用对象的notify()
-
Java中SimpleDateFormat用法详解
public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (date -> text).语法分析 (text -> date)和标准化. SimpleDateFormat 允许以为日期-时间格式化选择任何用户指定的方式启动. 但是,希望用 DateFormat 中的 getTimeInstance. getDateInstance 或 getDateTime
随机推荐
- Centos 7中Docker私有仓库的搭建方法
- asp下删除Access数词库中的空记录的sql语句
- Java 什么是注解及注解原理详细介绍
- IOS Bundle详细介绍及使用方法
- Oracle SQL性能优化系列学习三
- JS实现图片产生波纹一样flash效果的方法
- php通过修改header强制图片下载的方法
- php使用curl实现简单模拟提交表单功能
- PHP获取一年中每个星期的开始和结束日期的方法
- PHP新手上路(六)
- 关于iOS中属性变量setter与getter方法的理解
- Win7系统安装MySQL5.5.21图解教程
- 用VBS修改远程桌面3389端口并添加到Windows防火墙的代码
- VC++基于Dx实现的截图程序示例代码
- jquery $.ajax()取xml数据的小问题解决方法
- 计算机硬件注册表修改实例(二)
- C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法
- 实现dedecms图集单击图片翻页的功能
- C#中判断某类型是否可以进行隐式类型转换
- PHP简单获取上月、本月、近15天、近30天的方法示例