每个进程都有它自己的变量的完备集,线程共享相同的数据。---这也是危险之处。
线程创建和销毁的开销都比进程小。---这是好处。
简单的,你只要实现Runnable接口,实现重载run()方法,来做自己想做的事情。然后就是开启一个线程,把你实现的类的对象传入:
Runnable r = new myRunable(args[] a);
Thread t = new Thread(r);
t.start();
这种方法在处理多线程时是不建议的。为每一个线程做的开销是值得权衡的代价。<更好的办法是使用线程池>
线程的stop方法已经废弃。现在可以用interrupt方法来中断一个线程的执行。该方法会对线程的中断状态置位。它是一个布尔变量,存在与每个线程中。每个线程不时地检查这个标示。while(!Thread.currentThread().isInterrupt()&&.....).尽管如此,如果一个线程被阻塞了,它就无法检查中断状态了。这就是产生InterruptedException异常的地方。(interrupted方法会检查当前线程是否中断,该方法会清除该线程的中断状态;isInterrupted方法则不会清除……)
线程的优先级:在不同的宿主机上的虚拟机上,优先级可能依赖与宿主。所以,不要用线程的优先级依赖关系来作为程序功能的实现。
守护线程:唯一的作用就是为其它线程提供服务。当虚拟机中只剩下守护线程时,就没有继续运行程序的必要了。
通过setUncaughtExceptionHandler方法来为线程安装一个未捕获异常处理器。这个处理器的目的就是把异常写入日志。
线程同步:旧版本的JAVA使用Synchronized关键字,5.0以后使用ReentrantLock类来实现代码的保护。
myLock.lock();// a ReentrantLock object
try
{
critical section;
}
finally
{
myLock.unlock();// make sure the lock is unlocked even if an exception is thrown;
}
通常,一个线程进入临界区,发现它必须要满足某个条件后才能执行。要使用一个条件对象来管理那些已经获得锁,却不能开始执行有用工作的线程。
Condition sufficientFunds = banklock.newCondition();
在发现余额不足时,调用sufficientFunds.await();
这样,当前线程被阻塞,且放弃了锁。进入等待该条件集中。
当对该账户存钱后,需要调用sufficientFunds.signalAll();来解除等待线程的阻塞状态。这样,这些线程就可以在当前线程退出同步方法后,通过竞争获得对对象的访问。
JAVA语言中没有任何机制来确保死锁不发生。只能仔细设计自己的程序。
Stop()方法的废弃:是因为这个方法会终止所有未结束的方法包括run方法。当一个线程停止时,它会立即释放所有锁住他的对象上的锁。这会导致对象处于不一致的状态。
suspend方法的废弃:是因为它会引起死锁。(用suspend挂起一个拥有锁的线程,那么锁在恢复之前不会被释放)
分享到:
相关推荐
java 多线程同步详解 synchronized 的使用,锁定对象 ,锁定类 区别
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。本篇文章主要介绍了Java多线程-线程的同步与锁的问题,有兴趣的可以了解一下。
包括java的Thread类,同步块(synchronized),可重入锁,Object方法以及对象监视器等内容。
1.讲解了Java多线程的基础, 包括Thread类的核心API的使用。2.讲解了在多线程中对并发访问的控制, 主要就是synchronized的使用, 由于此关键字在使用上非常灵活, 所以书中用了很多案例来介绍此关键字的使用, 为...
本次实验了解线程与进程的概念、区别与联系,掌握了多线程的内涵与使用场景,掌握了线程的状态与生命周期,掌握了Java实现多线程的两种方式,理解了临界区、对象锁、互斥、同步等核心概念,理解了线程的互斥与同步,...
解决Java多线程同步的方法是在需要同步的方法签名中加入synchronized关键字,使用synchronized对需要进行同步的代码段进行同步,或使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象。为解决多个线程对同一...
多线程+同步+锁和条件+示例 - 本资源是一个多线程的示例,展示了如何用Java的锁和条件对象实现线程间的同步,避免数据的不一致和竞争条件。
java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...
摘要: 活动锁 与 死锁 不同,它是在线程实际工作的时候发生的,但这时还没有完成工作。这通常是在两个线程交叉工作的时候发生,所以第一个线程做的工作被另一个线程取消。一个简单的示例就是:每个线程已经拥有了一...
在char01包里放置Java多线程基本知识的代码。内容如下: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 在char02包里放置了Java对变量和对象并发访问的知识的代码...
本文主要介绍了Android多线程之同步锁的使用,分享给大家,具体如下: 一、同步机制关键字synchronized 对于Java来说,最常用的同步机制就是synchronized关键字,他是一种基于语言的粗略锁,能够作用于对象、函数...
线程的概念模型 线程的创建和启动 线程的状态控制 临界资源、对象锁和死锁 线程的互斥和同步
主要介绍了Java线程之锁对象Lock-同步问题更完美的处理方式代码实例,还是挺不错的,这里分享给大家,需要的朋友可以参考。
多线程买票是java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式是synchronized + 锁...
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
线程的概念模型 线程的创建和启动 临界资源、对象锁 线程的互斥和同步
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
3- Java多线程:同步 4- Java多线程:锁定对象 5- Java多线程:线程池 6- Java多线程:倒计时闩锁 7- Java多线程:生产者-消费者 8- Java多线程:等待并通知 9- Java多线程:低级生产者-消费者 10- Java多线程:可重...
摘要:Java源码,系统相关,线程同步,线程互斥 Java线程间同步互斥,在实际的编程中,经常要处理线程间的同步互斥问题。Java 语言内在强大的多线程支持使得处理这类问题变得相对来说比较简单。本例将模仿经典的线程...
1、在系统中对访类要使用多线程进行访问; 2、在该类中有 类变量,或者是 在类的方法中有访问公共资源(如一个外部文件的读写)。 同步锁锁定的内容是什么? 无论你将Synchronized加在方法前还是加在...