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

《多线程编程》学习之一:使用多线程及线程安全

2016-10-16 22:01 260 查看
1.1 进程和线程的概念

       进程是受操作系统管理的基本运行单元,而线程可理解为在进程中独立运行的子任务。使用多线程技术,可在同一时间内运行不同的任务,使系统的运行效率提高。

       一个运行着的程序至少有一个线程在运行,调用public static void main(String[] args)方法的线程是有JVM创建的。

1.2 使用多线程

1.2.1 继承Thread类

1)使用多线程时,代码的运行结果与代码的执行顺序是无关的:



2)执行start()方法的顺序不代表线程启动的顺序:



1.2.2  实现Runnable接口

        由于java不支持多继承,当需创建的线程类已经有父类时,就不能继承Thread类了,此时需要通过实现Runnable接口。



        需要注意的是Thread.java类也实现了Runnable接口,这意味着可以把一个Thread类对象传入构造函数Thread(Runnable target),也就是说可以把一个Thread类对象的run()方法教给其它线程调用。

1.3 实例变量与线程安全

1)不共享数据的情况:





2)共享数据时的情况:(多个线程访问同一个变量)

2.1)i--操作引起的线程不安全:



        “非线程安全”是指多个线程对同一个对象的同一实例变量进行操作时,出现值被更改、值不同步的情况。

本例中产生非线程安全的原因是,在JVM中,i--不是原子性操作,分为三步:取得i的值 --> 计算i-1 --> 对i进行赋

值。可以在run()方法前添加synchronized关键字来实现线程安全。

2.2)另一个线程不安全的例子:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: