java多线程(一) 之 简介

来源:互联网 发布:下载头像的软件 编辑:程序博客网 时间:2024/05/18 15:28

一. 多线程的优势:
GUI线程可以提高用户界面的响应灵敏度
服务器中,提升资源利用率以及系统吞吐率
简化JVM的实现
发挥多处理器的强大力量
建模的简单性
异步事件的处理简化

二. 线程带来的风险
1.安全性问题:
例如非线程安全的数值生成器:

public class UnsafeSequence {    private int value;    public int getNext(){        return value++;    }}

测试代码:

final UnsafeSequence ufs = new UnsafeSequence();        boolean a[] = new boolean[10000];        boolean b[] = new boolean[10000];        new Thread(){            public void run() {                for(int i = 0;i<10000;i++){                    a[ufs.getNext()] = true;                }            };        }.start();        for(int i = 0;i<10000;i++){            b[ufs.getNext()] = true;        }        for(int i = 0;i<a.length;i++){            if(a[i]==b[i])                System.out.println(i);        }

执行过程:

时间:(0.001ms)0-->1-->2-->3-->4-->5--6-->7-->8A: value=9  9+1=10  value=10B:    value=9   9+1=10  value=10

线程安全的数值序列生成器

public class Sequence {    private int value;    public synchronized int getNext(){        return value++;    }}

2.活跃性问题:
例如:线程A等待线程B释放其持有资源,而线程B永远都不释放该资源,那么A将会永远等待下去.
活跃性问题包括:死锁,饥饿,活锁.

3.性能问题:
例如: 服务时间过长,响应不灵敏,吞吐率过低,资源消耗过高,或者可伸缩性较低等.
当线程共享数据时,必须使用同步机制,而这些机制往往会抑制某些编译器的优化,是内存缓存区中的数据无效,以及增加内存总线的同步流量.

0 0
原创粉丝点击