多线程
Java是一个支持多线程的系统。
进程:执行中的程序,活动的实体。
线程:轻量级的进程,CPU基本使用单元,与同一进程其他线程一起共享代码和数据。并且有自己的线程ID和堆栈。(说明线程之间相互独立,线程间的交互通过共享的代码和数据进行。)
一个进程内可以同时使用多个线程。比如打开浏览器,他同时可以有多个标签页。
线程不能单独运行,需要放在进程中。
线程的五个生命周期:
1.新建:线程被创建以后进入的周期。
2.就绪:1)调用.start();方法进入。2)解除阻塞状态后进入。
3.运行:就绪中的线程获得了CPU资源(时间片)。
4.阻塞:CPU资源被占用。运行的线程因某些原因让出CPU资源。(比如打开WORD文档时无法传输该文件。)
5.终止:1)正常终止。2)强制终止:stop、destroy、system.exit(0)。3)异常终止。
创建线程:
1.继承Thread类:class 类名 extends Thread{public void run{};}
用 变量.start();开始多线程。在没有特殊处理的情况下,多个线程不分先后,由CPU决定,但同一线程内的代码存在先后顺序。
2.Runnable接口:class A(类名) implements Runnable{public void run{};
A a=new A;
Thread t1=new Thread(类名);
Thread t2=new Thread(A,“线程1”);}
对比只能进行单继承方法创建来说,通过接口的方式进行创建更加灵活。
多线程并发时的运行顺序由CPU决定,优先级高的程序会更大可能的先被执行。可用.setPriority来设置优先级。(Thread.MAX.是最高级)
线程调度:
1.休眠:sleep(毫秒);
2.暂停:yield();释放资源,让所有线程抢资源。
3.挂起:join();插在其他线程之前运行。
解决同步问题,对其进行加锁:
1.同步方法:synchronized 方法声明{}//获得方法所属的对象的锁。
2.同步块:synchronized(资源对象){需要同步的方法}
死锁:两个或多个线程之间,互相占用资源,使进程陷入死循环。