java并发、多线程知识点
来源:互联网 发布:3ds淘宝哪家 编辑:程序博客网 时间:2024/05/22 07:19
1.线程实现方法
即实现runnable接口或者继承thread类,由于java是单继承机制,所以一般采用实现runnable接口的方法。
public class LiftOff implements Runnable { protected int countDown = 10; private static int taskCount = 0; private final int id = taskCount++; public LiftOff() { } public LiftOff(int countDown) {this.countDown = countDown; } public String status() {return "#" + id + "(" + (countDown > 0 ? countDown : "LiftOff!") + "),"; } public void run() {while (countDown-- > 0) { System.out.println(status()); Thread.yield();//暂停当前正在执行的线程对象,并执行其他线程。试图让其它线程运行,但根本无法保证这一点 /* * try { TimeUnit.MILLISECONDS.sleep(100);//进入阻塞,休眠 } catch * (InterruptedException e) { e.printStackTrace(); } */} } public static void main(String[] args) {// 纯粹的直接调用,与线程无关。不过实际上仍然使用了线程,即分配给main函数的线程,但火箭本身没有开线程LiftOff lift = new LiftOff();// lift.run();// 新开的单独火箭发射线程,同时主线程仍在跑,与火箭线程竞争,本例"Waiting for LiftOff"反而先打印输出Thread t = new Thread(new LiftOff());// t.start();// System.out.println("Waiting for LiftOff");for (int i = 0; i < 5; i++) { new Thread(new LiftOff()).start(); System.out.println("Waiting for LiftOff");}以上即线程的基本实现方法,需注意的是,直接调用run方法不过是一次普通的方法调用,用thread调用start方法才能开启一个线程。因为线程是有一整个生命周期的,与直接调用方法不同。
在上面例子中,各个liftoff所在线程实际上都是由主线程main创建,但除此之外它们并没有其他关系。它们都会无差别的竞争资源,运行程序可以看出,输出语句"Waiting for LiftOff"虽然看起来在线程启动后运行,但却在其前面或中间均有输出,说明启动的线程和主线程在相互竞争。
由此也可以证明仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程。此前曾看到一个问题,如何在main方法运行完毕后继续执行某段程序,答案就是在main方法中新开一个线程单独去执行。
阅读全文
0 0
- java并发、多线程知识点
- JAVA多线程、并发知识点总结
- Java多线程、并发编程知识点小结
- Java中多线程并发体系知识点汇总
- Java中多线程并发体系知识点汇总
- Java中多线程并发体系知识点汇总
- Java 面试必会知识点:Java 多线程与并发编程
- Java面试知识点1——多线程和并发编程
- 多线程与并发知识点总结
- 多线程并发知识点(一)
- java 并发知识点收集
- Java并发知识点总结
- Java并发知识点总结
- 【多线程】java多线程知识点总结
- Java-多线程 知识点
- Java多线程机制知识点
- 多线程知识点-java
- JAVA 多线程面试知识点
- frameset 标签属性参考和简单实例应用
- Java.lang.IllegalArgumentException: already added: 异常解决办法
- js垃圾回收机制
- [YTU]_2575( 交通工具信息)
- Java基础 快速学习(四)
- java并发、多线程知识点
- switch-case中接受的参数类型
- CXF与REST服务实际开发
- linux自动清理日志脚本
- [YTU]_2477( C++习题 抽象基类)
- python)) unknown encoding: cp65001
- 解决ubuntu16.04 you are using pip version 8.1.1,however version 9.0.1 is available问题
- parallel scavenge 与parnew 区别
- [cocos2dx]这么了三天三夜的常见的ndk编译报错 dlopen failed: cannot locate symbol "atof" referenced by