今天学完IT十八掌第八天java基础课程:
学习内容:
复习jar命令
---------------
[将类路径下的类打成jar文件]
jar cvf myjar.jar -C classes/ .
jar cvfe myjar.jar a.a1.a11.a111.A -C classes/ . //e指定的入口点.
[使用java -jar参数来运行程序]
java -jar myjar.jar //执行jar文件
java -jar myjar.jar a.a1.a11.a111.A //执行jar文件指定入口点。
进程
-----------------
进程之间内存式隔离的。内存不共享。
eg:扫雷,qq
线程
-----------------
程序执行过程中,并发执行的代码段。
线程之间可以共享内存。
Thread : 线程类。
start() //通知cpu,可以开始执行该线程。
run() //线程具体执行的代码段。
Thread t = new Thread();
t.start();
Thread.currentThread() //得到当前的执行线程。
yield() //让线程放弃cpu的抢占权。
join() //等待当前进程完成,
sleep(int mils) //让当前线程休眠指定的毫秒数.
线程安全:增加了同步处理。确保在同一时刻,只有一个线程执行同步代码。
同步方法使用的当前对象作为同步对象。
静态方法可以加同步处理,使用Class作为同步对象。
KTV :
Box : //3
Waiter //守护线程 daemon Thread.setDaemon(true);
yield()
join()
sleep(int ms);
setDaemon(true); //线程启动前设置
isDaemon(); //指定线程是否是守护线程
start(); //启动线程
run(); //
notify() //选择一个监控器对象等待队列中的线程进行通知。
notifyAll() //选择所有监控器对象等待队列中的线程进行通知。
wait() //将当前线程放入监控器的等待队列中。
wait(int n ) //线程进入到等待队列后,最多等待n长时间,时间一旦,自动唤醒。
生产者 + 消费者问题
------------------------
List list = new ArrayList(); //数组列表
List<Integer> list = new ArrayList<Integer>(); //使用泛型,创建一个整数数组列表
遇到的问题:
1,多线程的生产消费问题。
|---两个线程操作同一个资源,首先需要保证操作资源时同步(synchronized),其次应该保证资源存 取和取出是有意义的。也就是线程之间通信正常(notify,wait)。还有就是注意死锁。
2,集合List以及泛型使用。
|---将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
元素是有序的,元素可以重复,因为该集合体系有索引。
3,多线程中的死锁问题,什么时候该使用yield(),notify,notifyAll,wait()
死锁是进程死锁的简称, 产生死锁的原因有两个
一种原因是系统提供的资源太少了,远不能满足并发进程对资源的需求。
另一种原因是由于进程推进顺序不合适引发的死锁。
需要帮助的问题
1,生产消费问题
2,死锁
3,集合