一、Jar包
1、生成jar包,并使用
- javac -d c:\myclass DemoA.java
- javac -d c:\myclass JarDemo.java
- java pack.JarDemo
- jar -cf haha.jar packa pack(生成jar包)
- jar -tf haha.jar(查看haha.jar中的内容)
- jar -tf haha.jar >c:1.txt(把jar包中的内容放在c:\1.txt中,这就叫数据重定向)
- 把packa pack删掉之后,set classpath=c:\myclass\haha.jar java pack.JarDemo也可以运行
二、线程间通信
1、输入输出代码。
- 解决安全问题;等待唤醒机制wait() notify()(输入一个,打印一个)。wait(); notify(); notifyAll();都使用在同步中,因为要对持有监视器(锁)的线程操作。
class Res { String name; String sex; boolean flag = false; Res() { } } class Input implements Runnable { private Res r; Input(Res r) { this.r = r; } public void run() { int x = 0; while(true) { synchronized(r) { if(r.flag) try{r.wait();} catch(Exception e){} if(x == 0) { r.name = "美美"; r.sex = "女"; System.out.println(Thread.currentThread().getName() + ":" + r.name + "..." + r.sex); } else { r.name = "zhangsan"; r.sex = "man"; System.out.println(Thread.currentThread().getName() + ":" + r.name + "..." + r.sex); } x = (x + 1) % 2; r.flag = true; r.notify(); } } } } class Output implements Runnable { private Res r; Output(Res r) { this.r = r; } public void run() { while(true) { synchronized(r) { if(!r.flag) try{r.wait();} catch(Exception e){} System.out.println(Thread.currentThread().getName() + ":" + r.name + "..." + r.sex); r.flag = false; r.notify(); } } } } class MyInputOutputDemo { public static void main(String[] args) { Res r =new Res(); Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t2 = new Thread(out); t1.start(); t2.start(); } }
- 代码优化:只是格式上的优化
class Res { private String name; private String sex; private boolean flag = false; Res() { } synchronized public void input(String name, String sex) { if(this.flag) try{this.wait();} catch(Exception e){} this.name = name; this.sex = sex; System.out.println(Thread.currentThread().getName() + ":" + this.name + "..." + this.sex); this.flag = true; this.notify(); } synchronized public void output() { if(!this.flag) try{this.wait();} catch(Exception e){} System.out.println(Thread.currentThread().getName() + ":" + this.name + "..." + this.sex); this.flag = false; this.notify(); } } class Input implements Runnable { private Res r; Input(Res r) { this.r = r; } public void run() { int x = 0; while(true) { if(x == 0) r.input("美美", "女"); else r.input("zhangsan", "man"); x = (x + 1) % 2; } } } class Output implements Runnable { private Res r; Output(Res r) { this.r = r; } public void run() { while(true) { r.output(); } } } class MyInputOutputDemo { public static void main(String[] args) { Res r =new Res(); new Thread(new Input(r)).start(); new Thread(new Output(r)).start(); } }
2、生产者消费者