1、线程和进程 (1)进程是运行中的程序,拥有自己独立的内存空间和资源; (2)一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程; (3)线程是最小的处理单位,多个线程共享一块内存和资源; (4)当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变。 2、多线程 线程的最主要功能是多任务处理,即多线程。多线程也就是在主线程中有多个线程在运行,多个线程的执行是并发的。 多线程和传统上的单线程在程序设计上的区别在于:由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度、同步等问题是需要重点留意的。 3、多线程的优点 (1)充分利用CPU资源。 (2)简化编程模型。 (3)简化异步事件处理。 (4)节约成本。 4、线程的状态 (1)Thread和Runnable区别 1)Thread是类,具有线程的所有方法,其对象就是一个线程对象。但继承Thread,就不能再继承其他的类(Java只支持单一继承)。 2)Runnable是接口,只提供run()方法。实现该接口的类还可以继承其他类,但其对象不是线程对象,不能直接运行,必须通过Thread将其启动。 (2)通过Runnable接口创建线程的步骤 1)实例化实现Runnable接口的类; 2)建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法; 3)通过Thread类的start()方法建立线程。 (3)线程优先级 1)线程的优先级代表该线程的重要程度。 2)当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定CPU分配时间。 3)优先级高的线程有更大的机会获得CPU时间。 4)线程的默认优先级值:Thread.NORM_PRIORITY,值为5。每个新线程均继承创建线程的优先级。setPriority()设置线程优先级。值为MIN_PRIORITY(1)和MAX_PRIORITY(10)之间的值。getPriority() 获取线程的优先级值。 5、线程间的通信 (1)线程通信的方法:wait()、notify()和notifyAll() (2)调用notify()方法时可以随机选择一个在该对象调用wait()方法的线程,解除它的阻塞。 (3)调用notifyAll()方法可以唤醒等待该对象的所有线程。但唤醒时无法控制唤醒哪个线程,唤醒过程完全由系统来控制。 (4)notify()方法和notifyAll()方法只能在同步方法或同步块内部使用。 6、线程间的死锁问题 所谓死锁,是指两个或多个线程都在等待对方释放对象资源而进入的一种不可调节的状态。 (1)产生死锁的原因 1)因为系统资源不足; 2)进程运行推进的顺序不合适; 3)资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 (2)wait()方法区别于sleep()方法的是: 1)wait()方法调用时会释放对象锁,而sleep()方法不会 2)sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用 3)sleep()是Thread类的Static(静态)的方法; 4)wait()方法是Object类里的方法;wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。 5)wait()必须放在synchronized block中,否则会在运行时扔出”java.lang.IllegalMonitorStateException“异常。 (2)通信协议指网络中传递、管理信息的一些规范。TCP/IP协议,IPX/SPX协议,NetBEUI协议等。 1)TCP/IP协议 IP协议:网络层协议,保证计算机之间发送和接收数据,能适应各种网络硬件。 无连接,不可靠的协议。 TCP协议:端对端的协议,端与端之间建立连接、发送、接收数据以及终止连接。 利用重发技术和拥塞控制机制,向应用程序提供可靠通信连接。 2)区别与联系:IP协议只保证计算机能发送和接受分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。两个协议统称为TCP/IP协议。 A类地址:0-126,默认掩码:255.0.0.0。 B类地址:128-191,默认掩码:255.255。 C类地址:192-223,默认掩码:255.255.255.0。 D类地址:广播地址,E类地址保留。