初识多线程(一)

    1、进程和线程的概念:

    进程:进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

    线程:线程可以理解成是在进程中独立运行的子任务。

    注意:多线程是异步的,所以千万不要把Eclipse里代码的顺序当成线程执行的顺序,线程被调用的时机是随机的。

    2、继承Thread类:

    实现多线程编程的方式主要有两种,一种是继承Thread类,另一种是实现Runnable接口。

    Thread类实现了Runnable接口,他们之间具有多态关系。

    使用继承Thread类的方式创建新线程时,最大的局限就是不支持多继承,因为Java语言的特点就是单根继承,所以为了支持多继承,完全可以使用Runnable接口的方式,一边实现一边继承。但用这两种方式创建的线程在工作时的性质是一样的,没有本质的区别。

    代码的运行结果与代码执行顺序或调用顺序是无关的。

    注意:如果多次调用start()方法,则会出现异常Exception in thread "main" java.lang.IllegalThreadStateException。

    3、实现Runable接口:

    如果欲创建的线程类已经有一个父类了,这时就不能再继承Thread类了,因为Java不支持多继承,所以就需要事先Runable接口来应对这样的情况。

    Thread.java类也实现了Runnable接口,意味着构造函数Thread(Runnable target)不光可以传入Runnable接口的对象,还可以传入一个Thread类的对象,这样做完全可以将一个Thread对象中的run()方法交由其它的线程进行调用。

    4.实例变量与线程安全:

    自定义线程类中的实例变量针对其它线程可以有共享与不共享之分:
①。每个独立的线程都有各自的变量,自己减少自己的变量的值,这样的情况就是变量不共享。
②。共享数据的情况就是多个线程可以访问同一个变量,比如在实现投票功能的软件时,多个线程可以同时处理同一个人的票数。
非线程安全-->主要指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。
通过在run方法前加入Synchronized关键字,使多个线程在执行run方法时,以排队的方式进行处理。当一个线程调用run前,先判断run方法有没有被上锁,如果上锁,说明有其它线程正在调用run方法,必须等其它线程对run方法调用结束后才可以执行run方法。这样也就实现了排队调用run方法的目的,也就达到了按顺序对count变量减1的效果了。Synchronized可以在
任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区"

当一个线程想要执行同步方法里面的代码时,线程首先尝试去拿这把锁,如果能够拿到这把锁,那么这个线程就可以执行Synchronized里面的代码。如果不能拿到这把锁,那么这个线程就会不断尝试拿这把锁,直到能够拿到为止,而是由多个线程同时去争抢这把锁。

    5、常用方法

    currentThread()方法可以返回代码段正在被哪个线程调用的信息。

    isAlive()方法的功能是判断当前的线程是否处于活动状态。(活动状态:线程已经启动且尚未终止)

   sleep()方法的作用是在指定的毫秒数内让当前"正在执行的线程"休眠(暂停执行)。这个"正在执行的线程"是指this.currentThread()返回的线程.

    getId()方法的作用是取得线程的唯一标识。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值