叨叨两句
今天累P了,熬夜发个简单版,一定保证不断更
写的太简单过不了审核,晕死。。重新加点内容
25-04:两个线程间的通信
public class test {
public static void main(String args) {
final Printer p = new Printer();
new Thread() {
public void run() {
while(true) {
p.print1();
}
}
}.start();
new Thread() {
public void run() {
while(true) {
p.print1();
}
}
}.start();
}
}
class Printer {
private int flag = 1;
public void print1() throws InterruptedException {
synchronized(this) {
if(flag != 1) {
this.wait();
}
System.out.print("黑");
System.out.print("马");
System.out.print("程");
System.out.print("序");
System.out.print("员");
System.out.print("\r\n");
flag = 2;
this.notify();
}
}
public void print2() throws InterruptedException {
synchronized(this) {
if(flag != 2) {
this.wait();
}
System.out.print("传");
System.out.print("智");
System.out.print("播");
System.out.print("客");
System.out.print("\r\n");
flag = 1;
this.notify();
}
}
}
25-05:三个或三个以上线程间的通信
- if语句的判断和while语句的判断区别:while是循环判断,而if不是。
- wait()语句在哪里等待,在哪里醒来
- 即便用notify唤醒了别的线程,当前线程也依然可能会有执行权。
- 控制台内容有限,内容太多会有部分内容被“顶”出去。
25-06:多线程间通信需要注意的问题
- 在同步代码块中,用哪个对象锁,就用哪个对象调用wait方法。
- 为什么wait方法和notify方法定义在Object类中?因为锁对象可以是任意对象
-
sleep方法与wait方法的区别?
- sleep方法必须传入参数,参数就是时间,到时间自动醒来。不释放锁。
- wait方法参数可传可不传,传入就是在参数时间后结束等待,不传入参数就是不唤醒就不醒来。释放锁。
25-07: JDK1.5新特性互斥锁
-
同步
- 使用ReentrantLock类的lock和unlock方法替代synchronize方法
-
通信
- 使用ReentrantLock类的newCondition()方法可以获取Condition对象。
- 需要等待的时候使用Condition的await方法,唤醒的时候使用signal方法
- 不同的线程使用不同的Condition,这样就能区分唤醒的时候找哪个线程。
25-08:线程组的概述和使用
- Java中用ThreadGroup来表示线程组,它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制。
-
默认情况下,所有的线程都属于主线程组(main)
- public final ThreadGroup getThreadGroup()【通过线程对象获取他所属的组】
- public final String getName()//通过线程组对象获取他组的名字
-
我们也可以给线程设置分组
- ThreadGroup(String name)创建线程组对象并给其赋予名字。
- 创建线程对象
- Thread(ThreadGroup group,Runnable target,String name)
- 设置整组的优先级或者守护线程
25-09:线程的五种状态
- 新建、就绪、运行、阻塞、死亡
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。