Java线程
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方法的自然结束
- java中,如何安全的结束一个正在运行的线程?
- 用interrupt()中断Java线程
- Java线程知识拾遗
- Linux定时任务不能调用copy的java线程。
- java线程同步问题——由腾讯笔试题引发的风波
- java线程中断 interrupt详解
- Java多线程-线程的同步与锁
- java中如何使正在运行中的线程退出
- JAVA-锁-线程
- Java线程:并发协作-生产者消费者模型
- Java线程中使用 sleep()和wait()区别
- java笔记--关于多线程如何查看JVM中运行的线程
- 【Java基础】线程笔记—— Fork/Join
- Java后台线程
- Java线程专栏文章汇总
- Java线程(八):Condition-线程通信更高效的方式 .
- Java多线程初学者指南(4):线程的生命周期
- Java线程同步问题产生的根源
- 学习和理解JAVA线程同步--生产者与消费者例子