Java线程简介

来源:互联网 发布:单片机lcd液晶显示 编辑:程序博客网 时间:2024/06/06 01:15

一、线程概念

线程,有时被称为轻量级进程,是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。

线程状态:

(1)新建。当一个线程对象被声明并创建时,新生的线程对象处于新建状态。

(2)就绪。处于新建状态的线程被启动后,即可拥有相应的内存空间和所属的资源。

(3)运行。处于就绪状态的线程被调度并获得CPU资源时,便处于运行状态。

(4)阻塞。一个正在运行的线程因某些原因让出CPU并暂时中止自己的运行时,就进入阻塞状态。

(5)死亡。当线程不具有继续运行的能力时,将处于死亡状态。

创建线程方式有两种:

1、继承Thread。

格式如下:

[public] class SubThread extends Thread{

.....

public void run(){

//要运行的代码

}

}

2、接口Runnable。

格式如下:

class OneThread implements Runnable{

.........

public void run(){

//要运行的代码

}

线程同步

方式:1、同步代码块

所谓同步代码块就是指“{-----}”括起来的一段代码,根据位置和声明的不同,可以分为普通代码块、构造块、静态块3种,如果在代码块加上synchronized关键字,则此代码块就称为同步代码块。格式如下:

synchronized(同步对象){

需要同步的代码;

}

    2、同步方法

同步方法和上面类似可以使用synchronized关键字将一个方法声明为听不方法。格式如下:

synchronized 方法返回值 方法名称(参数列表){

//代码

}

注意:在使用同步代码块时必须指定一个需要同步的对象,但是一般都将当前对象(this)设置为同步对象。

在使用线程时可能会发生死锁的问题,代码如下:

class DemoThread implements Runnable{private boolean flag;public DemoThread(boolean flag ) {// TODO Auto-generated constructor stubthis.flag = flag;}public void run(){if(flag){synchronized(MyLock.MyLock1){System.out.println("true MyLock1");synchronized(MyLock.MyLock2){System.out.println("true MyLock2");}}}else{synchronized(MyLock.MyLock2){System.out.println("false MyLock1");synchronized(MyLock.MyLock1){System.out.println("false MyLock2");}}}}}class MyLock{static Object MyLock1 = new Object();static Object MyLock2 = new Object();}public class ThreadDemo {public static void main(String[] args) {// TODO Auto-generated method stubThread thread1 =new Thread(new DemoThread(true));Thread thread2 =new Thread(new DemoThread(false));thread1.start();thread2.start();}}


0 0