packagecom.java.test;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.locks.ReentrantLock;classA{publicsynchronizedvoidBefore(B b){System.out.println("A-->before");try{Thread.sleep(100);}catch(Exception e){
e.printStackTrace();}b.After();}publicsynchronizedvoidAfter(){System.out.println("A-->after");}}classB{publicsynchronizedvoidBefore(A a){System.out.println("B-->before");try{Thread.sleep(100);}catch(Exception e){
e.printStackTrace();}a.After();}publicsynchronizedvoidAfter(){System.out.println("B-->after");}}classDeadLockimplementsRunnable{A a=newA();B b=newB();publicvoidinit(){a.Before(b);}@Overridepublicvoidrun(){b.Before(a);}}classNumberimplementsRunnable{privateint number =1;@Overridepublicvoidrun(){while(true){synchronized(this){notify();//唤醒一个 All 则唤醒所有if(number <=100){System.out.println(Thread.currentThread().getName()+":"+ number);
number++;try{wait();//等待被唤醒 wait()执行完会释放锁}catch(Exception e){
e.printStackTrace();}}else{break;}}}}}publicclassMain{publicstaticvoidmain(String[] args){// new ThreadTest1().start();// new Thread(new ThreadTest2()).start();// FutureTask<Integer> f =new FutureTask<Integer>(new ThreadTest3());//// new Thread(f).start();// Integer res=null;// try {// res = f.get();// }catch (Exception e){// e.printStackTrace();// }// System.out.println("结果-------->"+res);// ThreadTest4 t4 = new ThreadTest4();// t4.ThreadPool();// Number n = new Number();// new Thread(n).start();// new Thread(n).start();// DeadLock dl = new DeadLock();// new Thread(dl).start();// dl.init();// Window w = new Window();// new Thread(w).start();// new Thread(w).start();// new Thread(w).start();// new Thread(w).start();// Window1 w1 = new Window1();// new Thread(w1).start();// new Thread(w1).start();// new Thread(w1).start();// new Thread(w1).start();// Window3 w3 = new Window3();// new Thread(w3).start();// new Thread(w3).start();// new Thread(w3).start();// new Thread(w3).start();// Window4 w4 = new Window4();// new Thread(w4).start();// new Thread(w4).start();// new Thread(w4).start();// new Thread(w4).start();}}classThreadTest1extendsThread{@Overridepublicvoidrun(){for(int i=0;i<100;i++)System.out.println(i+":线程1");}}classThreadTest2implementsRunnable{@Overridepublicvoidrun(){for(int i=0;i<100;i++)System.out.println(i+":线程2");}}classThreadTest3implementsCallable<Integer>{@OverridepublicIntegercall()throwsException{for(int i=0;i<100;i++)System.out.println(i+":线程3");return1010;}}classThreadTest4{publicvoidThreadPool(){ExecutorService service =Executors.newFixedThreadPool(10);//适用于runnable
service.execute(newRunnable(){@Overridepublicvoidrun(){for(int i=0;i<100;i++){System.out.println(i);}}});//适用于callable方法创建线程
service.submit(newCallable<Object>(){@OverridepublicObjectcall(){System.out.println("hello");return100;}});
service.shutdown();}}classWindowimplementsRunnable{privateint ticket =100;@Overridepublicvoidrun(){while(true){synchronized(this){if(this.ticket >0){try{Thread.sleep(1);}catch(Exception e){
e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"窗口卖出了第"+this.ticket +"张票.");
ticket--;}else{return;}}}}}classWindow1implementsRunnable{privateint ticket =100;@Overridepublicvoidrun(){while(true){if(ticket>0){show();}else{return;}}}privatesynchronizedvoidshow(){if(ticket >0){try{Thread.sleep(1);}catch(Exception e){
e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"窗口卖出了第"+this.ticket +"张票.");
ticket--;}}}classWindow3extendsThread{privatestaticint ticket =100;@Overridepublicvoidrun(){while(true){if(ticket>0){show();}else{return;}}}privatestaticsynchronizedvoidshow(){if(ticket >0){try{Thread.sleep(1);}catch(Exception e){
e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"窗口卖出了第"+ticket +"张票.");
ticket--;}}}classWindow4extendsThread{privatestaticint ticket =100;privateReentrantLock lock =newReentrantLock(true);//创建一个公平的锁,先进先出,不写true则随机。@Overridepublicvoidrun(){while(true){try{
lock.lock();if(ticket >0){try{Thread.sleep(1);}catch(Exception e){
e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"窗口卖出了第"+ ticket +"张票.");
ticket--;}else{return;}}finally{
lock.unlock();}}}}