这是一篇自学java多线程的散文

在学习多线程之前,先来了解一些概念:

进程与线程

进程:是程序的实体,程序一旦运行就是进程。(资源分配的最小单位)

线程:是进程内独立执行的一个单元执行流。(CPU调度的最小单位)

概括:进程和线程都是一个时间段的描述,是CPU工作时间段的描述,进程与线程之间的关系是包含关系,一个进程中可以有多个线程并发执行。

进程的三种基本状态:

就绪态(ready):已经具备运行条件,但由于没有空闲CPU而暂时不能运行。进程已经拥有了除处理机之外的所有需要的资源,一旦获得处理机立即进入运行状态开始运行。(万事俱备只欠CPU

运行态(running):占有CPU并在CPU上运行。单核处理机环境下,每一个时刻最多只有一个进程处于运行状态(双核环境下可以有两个)

阻塞态(waitting/blocked):因等待某一件事而暂时不能运行。如:等待系统分配打印机,等待读磁盘的操作结果。

线程的五种状态:

创建(new):准备好了一个多线程的对象,即执行了new Thread(); 创建完成后就需要为线程分配内存

就绪(runnable):调用了start()方法, 等待CPU进行调度

运行(running):执行run()方法

阻塞(blocked):暂时停止执行线程,将线程挂起(sleep()、wait()、join()、没有获取到锁都会使线程阻塞), 可能将资源交给其它线程使用

死亡(terminated):线程销毁(正常执行完毕、发生异常或者被打断interrupt()都会导致线程终止)

进程之间如何通信?

通过TCP/IP的端口来实现

线程之间如何通信?

同一个进程内的线程是共享内存和文件的,只要指针指向的是同一个地址就可以访问对方的内存

java中的多线程开发:

java中创建线程有两种方式:继承 Thread 类或者实现 Runnable 接口

至于是使用继承的方式还是实现接口的方式就看实际的需要了。这里简单说一下,因为java不能多重继承的缘故,使用继承的方式创建线程类将不利于扩展,但是实现接口的方式则不利于传参。

下面是一个小例子,对比一下使用多线程和不使用多线程的区别,例子中使用的是实现接口的方式创建线程类:

测试用例代码:

运行结果:

有兴趣的话可以把同步关键字去掉再看看运行的结果

附录:=====================================================================================

CookTeaUsual 类的代码

CookTeaThread implements Runnable 的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值