对于某些问题,如果能够并行的执行程序中的多个部分,则回变得非常方便甚至必要,这些部分要么看起来是并发执行,要么是在多处理环境下同时执行。并行编辑可以使程序执行速度得到极大提高,或者为设计某些类型的程序提供更易用的模型。当并行执行的任务彼此开始产生互相干涉时,实际的并发问题就发生了。
一、并发的多面性并发解决的问题答题上可以分为“速度”和“设计可管理新”两种。
1.更快的执行想要更快的执行,需要多处理器,并发是用于多处理器编程的基本工具。这是使用强有力的多处理器Web服务器的常见情况,在为每个请求分配一个线程的程序中,它可以将大量的用户请求分布到多个CPU上。
当并发运行在单处理器时,开销可能要比顺序执行开销大,因为增加了上下文切换的代价。但是阻塞使得问题变得不同:如果程序中的某个任务因为该程序控制范围之外的某些条件(如:I/O)而导致不能继续执行,那么这个任务线程阻塞了。如果没有并发,则整个程序都将停止下来。因此,如果没有任务会阻塞,在单线程处理器机器上使用并发就没有任何意义。单线程并发一般使用在窗口操作。
Java所使用的这种并发系统会共享诸如内存和I/O这样的资源,因此编写多线程程序最基本的困难在于协调不同线程驱动的任务之间对这些资源的使用,以使得这些资源不会同时被多个任务访问。
2.改进代码设计简单举个例子吧,游戏里面多个npc,各自走各自的。
二、基本的线程机制并发编程是我们可以将程序划分为多个分离的、独立运行的任务。通过多线程机制,这些独立任务中每一个都将由执行线程来驱动。一个线程就是在进程中的一个单一的顺序控制流,因此,单进程可以拥有多个并发执行的任务,但是程序使得每个人物都想有自己的CPU。其底层机制是切分CPU时间。
1.定义任务线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口来提供。要想定义任务,只需实现Runnable接口并编写run()方法,使得该任务可以执行你的命令。
public class RunnableDemo implements Runnable { int i =100; @Override public void run() { while (i-->0){ Thread.yield(); } } }