java多线程处理
来源:互联网 发布:汽车dsp调音数据参考 编辑:程序博客网 时间:2024/06/15 19:59
1、线程与进程的基本概念与联系:
进程是应用程序的运行实例,而线程是进程内的一个执行单元;
一个进程可以包含多个线程,而一个线程必须要有一个父进程;
2、线程和进程之间的区别
进程之间不能够共享内存,但是线程之间可以共享内存;
系统创建进程的时候,需要为进程重新分配系统资源。但是,在创建线程的时候,不用重新分配系统资源。
3、线程的分类:
系统级线程(核心进程):负责管理不同进程之间的多个线程,按照相同的优先调度方法进行调度
用户级线程:线程的调度算法和调度过程全部由用户自行决定,运行时不需要要特定的系统支持。
4、如何创建和启动一个线程
方式一:继承Thread类,定义一个类,继承Thread类,然后实现父类的run()方法;
方式二:实现Runnable接口,定义一个类让它实现Runnable接口,然后实现run()方法,在创建线程的时候,需要new一个Thread对象,然后把这个Runnable对象作为参数传递进去;
5、线程的生命周期:
A、新建状态:用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存。
B、就绪(可运行)状态:当一个线程创建了以后,其他的线程调用了它的start()方法,该线程就进入了就绪状态。处于这个状态的线程位于可运行池中,等待获得CPU的使用权
C、运行状态:处于这个状态的线程,占用CPU,执行程序的代码。
D、阻塞状态:当线程处于阻塞状态时,java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才有机会转到运行状态。
阻塞状态分为三种情况:
A、 位于对象等待池中的阻塞状态:当线程运行时,如果执行了某个对象的wait()方法,java虚拟机就回把线程放到这个对象的等待池中
B、 位于对象锁中的阻塞状态,当线程处于运行状态时,试图获得某个对象的同步锁时,如果该对象的同步锁已经被其他的线程占用,JVM就会把这个线程放到这个对象的 琐池中。
C、 其它的阻塞状态:当前线程执行了sleep()方法,或者调用了其它线程的join()方法,或者发出了I/O请求时,就会进入这个状态中。
死亡状态:当线程退出了run()方法,就进入了死亡状态,该线程结束了生命周期。或者正常退出;或者遇到异常退出
Thread类的isAlive()方法判断一个线程是否活着,当线程处于死亡状态或者新建状态时,该方法返回false
6、java线程优先级:
用setPriority()方法修改线程的优先级,最大值是10,通常是5;
7、线程之间调度:
join()—》将当前线程加入到另一个线程的末尾,只有前面一个线程执行完,另一个线程才可能继续执行;
sleep()—》将当前线程睡眠指定的毫秒数,睡眠的时候会释放它所控制的处理器资源;
yield()—》不会让当前线程转入阻塞状态,而是转入可运行状态;
setDaemon()—》把一个线程设为后台线程,一个后台线程从属于创建它的线程,创建它的线程结束时,这个后台线程也会跟着消亡。
8、线程之间的同步控制:
同步整个方法:对象的锁是指this关键字指向当前对象的锁,如果一个类中有多个同步方法,这些方法之间是互斥的。
同步代码块:对象可以指定。
9、线程之间通信:
wait()、notify()、notifyAll()方法
- java处理多线程并发
- java 多线程异常处理
- java处理多线程并发
- java多线程处理
- java多线程处理
- Java多线程异常处理
- java多线程处理
- java多线程并发处理
- java多线程处理任务
- java 多线程 异常处理
- Java多线程并发处理
- java多线程处理
- Java 处理多线程
- java多线程处理业务
- Java多线程3 --- 多线程处理文件压
- Java多线程问题及处理
- java多线程处理任务【原】
- Java多线程问题和处理
- Java增强_反射的总结
- Android界面View及ViewGroup
- Unigui获取连接的客户端列表
- RISC和CISC的关系
- 多线程的使用(2) - NSOperation和NSOperationQueue
- java多线程处理
- GVIM乱码问题
- ural 1692 Flags for Provinces 解题报告
- 老婆需要的
- 关于printf打印输出格式
- uva 562 Dividing coins
- UniGui手动终止一个会话
- javascript 如何判断该月的共有多少天(不用判断是否是闰年);
- 程序员学习能力提升三要素