您的位置:首页 > 编程语言 > Java开发

java高并发-线程的基本使用

2017-11-08 17:30 405 查看

前言

文章是由本人阅读葛一鸣的《JAVA高并发程序设计》所做的记录,详情请阅读作者书籍

创建线程

1.start方法开启线程会新建一个线程并且让这个线程执行run方法

2.run方法开启线程不会创建新的线程,只会在当前线程串行执行run中的代码

终止线程

1.stop会强行把执行一半的线程终止,并且释放所。(容易造成程序执行一半就结束了,造成错误)

线程中断

1.public  void  Thread.interrupt; //中断线程
2.public boolean Therd.isInterrupted; //判断线程是否被中断
3.public static boolean Thread.interrupted;//判断是否被中断,并清除当前中断状态


设置中断标志后线程并不会停止执行,需要自定义相应的中断代码。

等待线程结束(join)和谦让(yield)

public final void join() throws InterruptedExcption;//无限等待,直到目标线程执行完毕
public final synchronized void join(long mills) throws InterrupteException; //设置最大等待时间,超过时间则直接执行
public static native void yield();//执行此方法后,当前线程会让出cpu,之后还会进行cpu抢夺,却不一定抢夺的到


volatile关键字

1.使用volatile关键字修饰变量会使虚拟机注意此变量的修改,如果未使用此关键字,当变量修改时,其他线程无法发现,使用volatile后,其它线程会发现。

2.volatile并不能保证一些复合操作的原子性。

3.使用volatile标识变量,可以在已运行的程序中动态的修改变量

线程组(ThreadGroup)

1.如果线程比较多,功能分配明确,可以使用线程组管理线程

守护线程

1.是系统的守护者,比如垃圾回收线程。

2.守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。

3.当线程只有守护线程的时候,jvm就会退出。

4.Thread.setDaemon必须设置在Thread.start前,否则会报异常,显示守护线程设置失败。但是程序会依然正常执行,守护线程也会被当做用户线程

线程优先级

1.Thread.setPriority(参数),由低到高,1-10.数字越大优先级越高

同步锁(synchronized)

1.指定枷锁对象:对给定对象加锁,进入同步代码前要获得给定对象锁。

2.直接作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得给定对象锁。

3.直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获得给定对象锁。

4.线程同步,线程安全,保证线程的可见性,有序性

并发下的ArrayList

1.下标越界异常:ArrayList扩容时,另一个线程访问到不一致的内部状态。

2.数据错误:两个线程同时对一个下标进行赋值。

并发下的HashMap

1.同ArrayList,两个线程同时对Map进行赋值。

2.死循环,链表遭到破坏,形成环路(jdk8已改善)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: