昆明java培训
达内昆明广州春城路

18487146383

热门课程

Java并行基础

  • 时间:2016-07-31
  • 发布:昆明Java培训
  • 来源:达内新闻

Java并行基础

1、线程状态图及基本操作

2、新建线程

start()而不是run()

3、终止线程

stop:stop比较暴力,会直接终止线程,并且释放这个线程所持有的锁,可能会导致数据不一致性;

正确的方法应该是在线程体里面增加一个标志位,标志位代表是否终止该线程,线程执行的时候回检查标志位的状态,如果为true,则退出执行;

4、线程中断

关于线程中断有3个方法:

public void Thread.interrupt() //中断线程,设置中断标志位

public boolean Thread.isInterrupted() //判断是否被中断

public static boolean Thread.interrupted() //判断是否被中断,并清除中断状态

在具体应用的时候需要像stop线程一样,在线程执行方法里面检查该线程是否被中断,如果被中断就退出;

5、线程等待和通知

线程等待和通知通过调用obj.wait() 和 obj.notify()方法执行,当调用wait方法时,该线程就会在这个对象上等待,直到其他线程调用该对象notify方法,obj就是多个线程之间的通信手段;

wait方法必须在同步快中调用,notify方法会在该对象的阻塞队列中随机选择一个线程运行;

wait方法和sleep方法一样 都可以让线程等待一段时间,除了wait可以被唤醒,sleep需要被打断,另外一个主要的区别就是wait方法会释放目标对象的锁,而sleep方法则不会;

6、suspend和resume

suspend和resume方法已被废弃,因为suspend在挂起线程的同时并不会释放任何锁资源,从而导致其他线程也无法执行,直到调用了resume方法,被挂起的程序才能被访问;

7、join和yield

join表示无限等待,他会一直阻塞当前线程,直到目标线程执行完毕;

yield会让出cpu,然后就想争夺cpu;

10、volatile与jmm

volatile关键字保证共享数据的可见性,线程会在释放锁之前把数据写回主存,保证其对其他线程可见;但是volatile只是保证可见性,并不能保证互斥性,而synchronized既可以保证可见性,又能保证互斥性;

11、守护线程

系统的守护者,在后台默默执行一些系统服务,如垃圾回收线程、jit线程;与之相对的是用户线程,用户线程是系统的工作线程,如果用户线程全部结束,那这个程序也就无事可做了,应用程序就会退出;

12、线程优先级

在Java中,使用1到10表示线程的优先级,数字越大,优先级越高;

13、synchronized关键字用法

制指定加锁对象

直接作用于实例方法,进入同步代码的时候会获得当前实例的锁;

直接作用于静态方法:相对于当前类加锁,进入同步代码的时候会获得当前类的锁;

14、Java集合的线程安全性

线程安全的Java集合:vector,stack,enumeration,hashtable,还有并发包里面的一些类:CopyOnWriteArrayList, ConcurrentHashMap,CopyOnWriteArraySet。

上一篇:jmm的一些特性
下一篇:Java并发包

AI初创企谷歌跑在前面了!达内java培训

‘资产荒’为什么这么说?【达内培训】

java集合-Iterator迭代

阿里云澳门战略携手创“城市大脑”——达内编程培训

选择城市和中心
贵州省

广西省

海南省

台湾