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

java线程

2016-03-05 12:56 253 查看
线程:就是进程中一个负责程序执行的控制单元(执行路径),

一个进程中可以多执行路径,称之为多线程。

一个进程至少有一个线程

开启多个线程是为了同时运行多部分代码

每一个线程都有自己运行的内容,这个内容可以称为要执行的任务。

多线程好处:解决了多部分同时运行的问题

多线程弊端:线程太多回收的效率降低

jvm创建的主线程的任务都定义在了主函数中

自定义线程是通过Thread类中的run方法来体现,

run方法就是封装自定义线程运行任务的函数

run方法中定义的就是线程要运行的任务代码

调用start执行

可以通过Thread的getName()获取线程的名称,Thread-编号(从0开始)

主线程名字就是main

线程的状态:

start:开始线程

sleep: 睡眠

wait:等待

notify: 唤醒

stop:强制结束

临时阻塞状态

CPU执行资格:可以被CPU的处理,在处理队列中排队

CPU执行权:正在被CPU的处理

创建线程的第一种方式:

extends Thread();

创建线程的第二种方式(常用):

1.定义类实现Runnable接口

2.覆盖接口中的run方法,将线程的任务代码封装到run方法中

3.通过Thread类创建线程对象,并将Runnable接口的子类对象

作为Thread类的构造函数的参数进行传递(线程的任务都封装在

Runnble接口子类对象的run方法中,所以要在线程对象创建时就

必须明确要运行的任务)

4.调用线程对象的start方法开启线程

实现Runnable接口的好处:

1.将线程的任务从线程的子类中分离出来,进行了单独的封装

2.避免了java单线程的局限性

产生线程安全问题的原因:

1.多个线程在操作共享数据

2.操作共享数据的代码有多条

当一个线程在执行操作共享数据的多条代码过程

中其他线程参与了运算,就会导致线程安全问题的产生

 

 用同步代码块解决多线程异常问题:synchronized

同步的好处:解决了多线程的安全问题

同步的弊端:相对降低了效率,因为同步外的

线程都会判断同步锁

死锁程序:

class Test{

    private boolean flag;

    Test(boolean flag){

        this.flag=flag;

    }

    public void run(){

        if(flag){

            synchronized(MyLock.locka){

                synchronized(MyLock.lockb){}

            }

            

        }else{

            synchronized(MyLock.lockb){

                synchronized(MyLock.locka){}

            }

        }

    }

class MyLock{

    public static final Object locka = new Object();

    public static final Object lockb = new Object();

}

class Run{

    public static void mian(String[] args){

    Test a = new Test(true);

    Test b = new Test(false);

    Thread t1 = new Thread(a);

    Thread t2 = new Thread(b);

    t1.start();

    t2.start();    

}

}

等待/唤机制

涉及的方法:

1.wait():让线程处于冻结状态,被wait的线程会被

存储到线程池中

2.notify():唤醒线程池中的一个线程(任意)

3.notifyAll():唤醒线程池中的所有线程

线程间通信-多生产者多消费者问题

wai和sleep的区别:

1.wait可以指定时间也可以不指定

  sleep必须指定时间

2.在同步中时,对cpu的执行权和锁的处理不同

    wait:释放执行权,释放锁

    sleep:释放执行权,不释放锁

    

停止线程:

1.stop方法

2.run方法结束  

守护线程:setDaemon

其他方法join:

jion:等待该线程终止

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