一. 线程与进程的区别:
- 1.线程(Thread)与进程(Process)
进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。
不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。
进程是资源分配的最小单位,线程是CPU调度的最小单位。 - 2.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。
多进程的应用
比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。
二. run()与start()的区别
- t.run(); 只是调用了一个普通方法,并没有启动另一个线程,程序还是会按照顺序执行相应的代码。
- t.start(); 则表示,重新开启一个线程,不必等待其他线程运行完,只要得到cup就可以运行该线程,是真正实现了多线程运行。
三. wait方法和sleep方法的区别
先了解一下线程的各个状态
wait
- 等待队列(释放资源)—>调用notify或者notifyall之后锁池状态—>( 等待锁释放)—>可运行状态—>运行状态---->访问代码
- wait()、notify()和notifyAll()都是Object的方法
- wait()方法则只能在同步方法或同步块中使用;
sleep,join
- 不释放资源–>结束后直接进入可运行状态—>运行状态---->访问代码
- sleep()、yield()是Thread类的静态方法
- sleep()方法可以在任何地方使用
Thread.yield()方法:
- 暂停当前正在执行的线程对象,使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。
其他线程的知识
Java多线程实现的四种方式、线程的生命周期