java多线程细节
来源:互联网 发布:java分布式开发书 编辑:程序博客网 时间:2024/06/11 20:09
1.线程名的占用问题
结果:
注:输出结果顺序不固定
通过比较:创建线程时,如果不设置线程名,系统会自动分配线程名,并占位,通过thread3:Thread-1就可断定thread2占据着Thread-0的位置。
2.Thread类的start方法不能多次调用,如不能调用两次thread1.start()方法。否则会抛出一个IllegalThreadStateException异常
3.如果通过继承Runnable的方式创建线程,很多方法都不能用(如isAlive等)
Runnable接口源码如下:
问题:如果我需要extends其他类,又要用到isAlive方法怎么办?
public class Demo1 extends Thread{ private String who; public void run() { System.out.println(who + ":" + this.getName()); } public Demo1(String who) { super(); this.who = who; } public Demo1(String who, String name) { super(name); this.who = who; } public static void main(String[] args) { Demo1 thread1 = new Demo1 ("thread1", "MyThread1"); Demo1 thread2 = new Demo1 ("thread2","MyThread2"); Demo1 thread3 = new Demo1 ("thread3"); thread1.start(); thread2.start(); thread3.start(); }}
结果:
thread1:MyThread1thread3:Thread-0thread2:MyThread2
注:输出结果顺序不固定
public class Demo1 extends Thread{ private String who; public void run() { System.out.println(who + ":" + this.getName()); } public Demo1(String who) { super(); this.who = who; } public Demo1(String who, String name) { super(name); this.who = who; } public static void main(String[] args) { Demo1 thread1 = new Demo1 ("thread1", "MyThread1"); Demo1 thread2 = new Demo1 ("thread2"); Demo1 thread3 = new Demo1 ("thread3"); thread2.setName("MyThread2"); thread1.start(); thread2.start(); thread3.start(); }}
thread2:MyThread2thread3:Thread-1thread1:MyThread1
通过比较:创建线程时,如果不设置线程名,系统会自动分配线程名,并占位,通过thread3:Thread-1就可断定thread2占据着Thread-0的位置。
2.Thread类的start方法不能多次调用,如不能调用两次thread1.start()方法。否则会抛出一个IllegalThreadStateException异常
3.如果通过继承Runnable的方式创建线程,很多方法都不能用(如isAlive等)
Runnable接口源码如下:
/** * The <code>Runnable</code> interface should be implemented by any * class whose instances are intended to be executed by a thread. The * class must define a method of no arguments called <code>run</code>. * <p> * This interface is designed to provide a common protocol for objects that * wish to execute code while they are active. For example, * <code>Runnable</code> is implemented by class <code>Thread</code>. * Being active simply means that a thread has been started and has not * yet been stopped. * <p> * In addition, <code>Runnable</code> provides the means for a class to be * active while not subclassing <code>Thread</code>. A class that implements * <code>Runnable</code> can run without subclassing <code>Thread</code> * by instantiating a <code>Thread</code> instance and passing itself in * as the target. In most cases, the <code>Runnable</code> interface should * be used if you are only planning to override the <code>run()</code> * method and no other <code>Thread</code> methods. * This is important because classes should not be subclassed * unless the programmer intends on modifying or enhancing the fundamental * behavior of the class. * * @author Arthur van Hoff * @see java.lang.Thread * @see java.util.concurrent.Callable * @since JDK1.0 */publicinterface Runnable { /** * When an object implementing interface <code>Runnable</code> is used * to create a thread, starting the thread causes the object's * <code>run</code> method to be called in that separately executing * thread. * <p> * The general contract of the method <code>run</code> is that it may * take any action whatsoever. * * @see java.lang.Thread#run() */ public abstract void run();}
问题:如果我需要extends其他类,又要用到isAlive方法怎么办?
0 0
- java多线程细节
- java多线程细节归纳汇总
- Java多线程Synchronized的注意细节
- Java多线程Synchronized的注意细节
- Java多线程Synchronized的注意细节
- Java(8-4)多线程各种细节问题1
- 多线程的几个细节
- 多线程细节解析
- java细节
- java细节
- java细节
- java细节
- java 细节
- Java细节
- java 细节
- Java细节
- java细节
- Java细节
- C# WinForm程序退出的方法
- 处理二值查询 Processing Boolean queries
- Html5添加跨浏览器的带放大镜效果的商品橱窗插件教程
- 利用Junit4进行单元测试
- 数据集
- java多线程细节
- 去掉指定tableviewcell下面的分割线
- 截屏,并将截取的图片保存到相册中
- 大规模图像数据库的搜索-图像检索 Searching in large image databases -- Image retrieval
- C++小题(十二)
- 函数访问参数受限的处理方法
- linux系统分区和文件系统概念-41
- xml属性和子元素的选择
- 嵌入式①之lunix(二)