1.sleep()是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其他线程可能正在运行,而且没有被调度为放弃执行,除非“醒来”的线程具有更高的优先级,或者正在运行的线程因为其他原因而阻塞;
2.wait(),当线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到;
设计四个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1,循环100次,写出程序;
package com.ws;
public class ThreadTest1 {
/**
* 设计思路:
* 1.创建一个资源j;
* 2.构建增加的方法,为了编码出现死锁问题,使用synchronized关键字,并输出线程的相关信息
* 3.构建内部类Inc,Dec,主要目的是为了在里面进行for循环实现数据的增加或是减少
* 4.最后在main方法中,创建两个内部类的对象,每次开启两个线程
*/
private int j;
public static void main(String[] args) {
ThreadTest1 tt = new ThreadTest1();
Inc inc = tt.new Inc();
Dec dec = tt.new Dec();
for(int i=0;i<2;i++){
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
@Override
public void run() {
for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
for (int i=0;i<100;i++){
dec();
}
}
}
}