每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。start()方法来启动一个线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;这时此线程是处于就绪状态,并...
如果线程调用了对象的wait()方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。当有线程调用了对象的notifyAll()方法(唤醒所有wait线程)或notify()方法(只随机唤醒一个wait线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调...
守护线程(即daemonthread),是个服务线程,准确地来说就是服务其他的线程。它能够自我结束。如果JVM中没有一个正在运行的非守护线程,这个时候,JVM会退出。JVM中的垃圾回收线程就是典型的守护线程,如果说没有守护线程,JVM就永远不会退出了
进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。
按功能分:输入流(input)、输出流(output)按类型分:字节流、字符流
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等等。
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
vector:就比ArrayList多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用statck:堆栈类,先进后出hashtable:就比HashMap多了个线程安全enumeration:枚举,相当于迭代器
Queue中remove()和poll()都是用来从队列头部删除一个元素,在队列元素为空的情况下,remove()方法会抛出NoSuchElementException异常,poll()方法只会返回null。
Array可以容纳基本类型和对象,而ArrayList只能容纳对象。Array是指定大小的,而ArrayList初始化大小是固定的。Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。