多线程(二)
来源:互联网 发布:知乎著名小黄文 编辑:程序博客网 时间:2024/04/28 19:12
java对多线程的实现:
继承Thread类, 资源不能同享;
实现Runnable接口,可以实现资源的共享.
但是无论是继承还是实现, 都需要我们去复写run(), 此方法为线程的主体. 启动线程靠的是 Thread的 start()
start() --> run()
当线程被 start() 之后 并不是立刻 启动的, 它会首先进入一个 "就绪状态" ,等待CPU分配内存空间,等分配好之后, CPU会过来调用该线程的run() , 使该线程进入运行状态.当程序因为某种原因意外停止的时候,就会进入 "阻塞状态" ,他就暂时停止不会动了, "阻塞状态" 结束之后就会进入 "就绪状态",等待CPU资源的调用.
线程名称的获取是通过 Thread的静态方法调用来获取的
即 Thread.currentThread()
获取线程名称, Thread对象.getName() 同时也可以通过 Thread.setName() 来设置Thread的名称.
线程的名称一般是在启动之前设置的, 但是也允许为启动之后的线程设置名称.
所有的线程操作就是值得 Thread类的操作.
当前的线程可以指操作当前调用这个方法的线程 即当前线程就是 "线程.方法()" 当前线程就是这个" 线程".
通过程序中 Thread.getName() 得出的 ThreadName 标识号都是从 "0" 开始的.
其实我也是刚刚知道, mian 方法 也是一个多线程, 所以之前的所有程序都是基于多线程机制, 在main方法中, 通过对象.方法调用的一切代码都是主线程.
start() 通知线程规划器这个新线程已经准备就绪 , 而且应当在规划器最早的方便时间调用它的run() .
isAlive() 用来测试线程是否已经启动, 并且仍然启动呢?
一个线程只能启动一次,
isAlive() 在 线程启动之前呢 , 返回的结果肯定就是 false 了, 在 start() 之后呢 大多数情况下是true, 但是有些时候还是 false的 , 那么这是为什么呢? 因为线程有可能优先执行完的,那么 结果是false , 也有可能是最后才执行完, 这个时候返回的是 true 了.
使用public static void sleep(long millis)
throws InterruptedException 可以使程序进行短暂的休眠, 首先看到它是一个静态方法 , 然后呢 这个方法会向外抛出一个异常, 也就是我们在程序中调用该方法的时候 一定要对其进行异常处理 try{}catch{}
在线程中使用join方法, 用于强制某一线程运行,
public final void join()
throws InterruptedException 看到了 , 在这里, join() 也是会抛出一个异常的 .
join() 表示什么呢? 一个 "线程对象.join()" 表示当这个 "线程对象"必须完成之后 其它的线程才可以继续执行, 表示强制性运行.
- 多线程(二)
- 多线程二
- 多线程(二)
- 多线程二
- 多线程二
- 多线程二
- 多线程(二)
- 多线程(二)
- 多线程二
- 多线程同步(二)
- 多线程之二
- C#多线程(二)
- 多线程编程之二
- VC多线程编程(二)
- VC多线程编程二
- 多线程学习笔记(二)
- VC多线程编程(二)
- VC多线程编程 (二)
- JAVA3D学习
- .NET开发人员必知的八个网站
- 建DataGridView的定制NumericUpDown单元格(Cell)和表格列(Column
- 单链表逆置的递归与非递归算法 [简单的小算法练习]
- PHP会话(Session)使用入门
- 多线程(二)
- 夜已深
- lucene 建立简单搜索引擎实例
- 优化PHP代码的40条建议
- Objective-C introduction - 3
- 关于工作
- CUDA Programming Guide之shared memory的Bank Confict
- Ubuntu 8.04 LTS 速配指南
- 我想找高手做个即时信息软件