1.进程与线程
一个进程包含多个线程。可以把进程当做一个应用程序。
操作系统分配一段时间给一个进程,让CPU执行该进程。进程再将时间片段分割给各个线程
2.创建线程(Thread)的方法
//方法一 Thread thread = new Thread(){ @Override public void run() { // TODO Auto-generated method stub super.run(); //要写的代码 } };//创建Thread类,重写run方法 thread.start() //开启线程
//方法二 public class test { public static void main(String[] args) { // TODO Auto-generated method stub NewThread nt = new NewThread(); Thread thread = new Thread(nt);//将该类放入Thread类中 thread.start();//启动线程 } } class NewThread implements Runnable{//创建一个继承Runnable接口的类 @Override public void run() { // TODO Auto-generated method stub //要写的代码 } }
注:所以说Thread类自身继承了Runnable();
3.线程的生命周期
图解
理解: 线程具有7种状态
出生:在Thread运用start()方法之前都算出生状态 就绪:当start()方法完成之后线程处于就绪状态(等待执行)
运行:操作系统分配时间,让线程进入cpu运行
产生阻塞的三种方法(也是三种状态):
等待:利用thread1.wait()线程自动进入阻塞状态。
一种设置时常:thread1.wait(1000);//当过了1000毫秒后自动处于就绪状态
另一种不设市场:只能够其他线程利用thread1.notify()唤醒,否则将一直处于阻塞状态。
睡眠:利用thread.sleep()进入睡眠状态。
必须设置时长,当时间过了自动进入就绪状态
阻塞:当线程处于等待I/O的输入输出方可再次运行时,处于阻塞状态。等到输入输出完毕时候自动进入就绪状态。
最后
线程运行完之后处于死亡状态
4.线程的优先级
优先级高的线程先运行,低的后运行。
thread.setPriority(int rank);//设置优先级 thread.yield()//让比自己高优先级的线程先运行
5.其他主要方法
//join()方法 Thread thread1 = new Thread(){ public void run (){ thread2.join(); //thread2调用了join方法 } }; Thread thread2 = new Thread(){ public void run (){ // } } //所以thread1要等待thread2执行完毕才能执行
6.线程同步
1.什么叫线程同步,为什么需要线程同步
当多个线程同时修改或调用同一个资源的时候,可能会导致数据不一致的情况,为了防止这种情况。就需要当一个线程使用资源的时候,另一个线程需要等待前一个线程使用完成。
2.线程锁
将资源对象锁住,防止其他线程使用。
//方法一 Thread thread = new Thread(){ @Override public void run() { // TODO Auto-generated method stub super.run(); synchronized(){ //锁住资源对象 } } } //方法二 Thread thread = new Thread(){ @Override public void run() { // TODO Auto-generated method stub super.run(); use(); } private synchronized void use(){ //锁住资源对象 } } //所以说synchronized是一个修饰符
7.小技巧
1.如何控制线程死亡:
boolean isDead = true; Thread thread = new Thread(){ @Override public void run() { // TODO Auto-generated method stub super.run(); while(isDead){ if (...){ //... } else{ isDead = false; } } } }
时间: 2024-08-06 20:06:57