java之多线程初解

一.进程和线程

进程是程序(任务)的执行过程,是动态的,持有资源(共享内存、共享文件)和线程。
线程是系统中最小执行的执行单元,同一个进程有多个线程,线程共享进程的资源。
二.怎么实现线程
继承Thread类或者实现runnable接口,实现里面有个run方法,调用start()启动线程,
sleep()使线程进入睡眠状态。

三.简单实现二个线程

测试结果

三.线程的正确停止方法

错误一   .用stop()停止

此方法会导致线程戛然而止,我们不清楚线程完成了什么,没完成什么,也没有时间来完成对应的线程运行的清理工作。

错误二 用interrupt()方法打断

当一个线程调用某些方法(join(),sleep()等)而被阻塞时,interrupt()方法会使得中断状态被清除(isInterrupted()方法返回false)并使得当前线程抛出异常。(这仅仅是一个状态,并非直接打断,后续如果想中断线程,可以用isInterrupted方法判断来终止

正确方法  设置状态标识

通过控制此状态标识,来控制线程的正常完整的结束(上面代码的boolean keepRunning就是状态标识),另外,volatile关键字是保证线程变量对外可见的标志,通过此关键字修饰的状态变量,才能在别的线程中被正确的赋值。


四.线程交互中的一些问题

(1)争用条件:当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏。

解决方法:用synchronized关键字实现互斥,并加锁;如下

 private final Object lockObj = new Object();//锁

 synchronized(lockObj){线程内容};//加锁

(2)线程中的互斥与同步

互斥:

1:线程的互斥是指,在同一时间关键数据只能有一个线程访问
2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码

同步:

1:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后通知另一个线程可以进行下面的事情了
2:线程同的实现有wait(),notify(),notifyall()这几个方法来实现,这几个方法都是属于object类,并不是thread类

五:线程进阶

1、Java Memory Mode:JMM描述了java线程如何通过内存进行交互,了解happens-before,synchronized,voliatile & final
2、Locks % Condition:锁机制和等待条件的高层实现 java.util,concurrent.locks
3、线程安全性:原子性与可见性,死锁等
4、多线程常用的交互模型
· Producer-Consumer模型
· Read-Write Lock模型
· Future模型
· Worker Thread模型
5、Java5中并发编程工具:java.util.concurrent 线程池ExcutorService Callable&Future BlockingQueue
6、推荐书本:CoreJava & JavaConcurrency In Practice








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值