Java线程

来源:互联网 发布:婴儿面膜淘宝授权书 编辑:程序博客网 时间:2024/06/06 06:47

Java是一门支持多线程的语言,首先要先了解,线程和进程的区别。

进程:程序本身是一堆二进制文件,只有加载进内存并运行,才叫进程。

线程:线程是进程的最小单位,不能单独运行,只存在进程中。

区别:线程是进程的最小调度单位,进程之间通信困难,因为不共享内存空间,同一进程中的多个线程可以互相通信,因为共享。


Java实现多线程的二种方式:

1.extends Thread

2.implement Ruanble

Thread类也实现了Ruanble接口

二者的区别:

不管是继承Thread还是实现Runable都需要重写或实现Run方法,然后通过Thread类的start()方法来使线程转化到可运行状态

Thread类提供了以Ruanble接口的实现类为参数的构造方法,因为它本身的run()方法不具有实现,调用的是参数的run()方法的实现,又或者你可以继承Thread类,来重写它的run()方法,来实现线程。


同步:在多线程的环境中,可能会有二个或者更多线程试图同时访问一个有限资源,所以使用同步对资源上锁,可以同步方法,也可以同步代码块,推荐同步代码块因为它是低粒度的

sleep 和wait的区别:

首先:wait方法是fianl的,是Object类的,sleep方法是Thread类的,其次,调用wait方法的时候,会释放掉对象的锁,而sleep只是休眠,并不会释放对象的锁

notify notifyAll

当调用wait以后,释放掉了当前对象的锁,直至另一线程调用该对象的notify方法,该线程才被唤醒,进入锁池等待。

线程的生命周期:

首先new Thread() 创建了线程,当main线程调用该线程的start()方法的时候线程进入可运行状态(Runnable),如果获得cpu的调度,则进入运行状态(Running),如果安稳执行完run方法,则线程Dead。

如果线程在进入可运行状态后,遇到同步代码块或者同步方法,但是并没有获得对象的锁,则从运行状态进入锁池,等待锁的释放,然后进入可运行状态,直到获得cpu调度,才可运行。

如果线程在进入可运行状态后,在获得对象锁的情况下,调用对象的wait方法,会进入等待池,直到其他线程调用该对象的notify方法,从从等待池进入锁池

线程的dead不能通过stop来结束,那是不安全的,只能通过run方法的自然结束

1 0