java之学习多线程(一)
2015-08-28 14:15
543 查看
在java中,想要实现多线程程序,就需要依靠一个线程的主体类,这个线程的主体类可以继承Thread类或实现Runnable 接口来完成定义,但是这两种方式有何不同,用哪个更好后面将会讲到。
(1)继承Thread类实现多线程(public Thread(Runnable target,String name)实例化线程对象,接收Runnable接口子类对象,同时设置线程名称)
(1.1.1)错误的运行结果
![](http://img.blog.csdn.net/20150828142507573?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以从运行结果看出,所谓的线程是按照我们的书写顺序完成的,所以以上的操作并没有真正的启动多线程。因为启动多线程有一个特点就是线程彼此之间是交替运行的。想要在程序中真正的启动多线程必须依靠Thread类的方法public
void start(),表示真正的启动多线程,调用此方法后将间接调用run()方法。
(1.2)正确的线程操作方法
(1)继承Thread类实现多线程(public Thread(Runnable target,String name)实例化线程对象,接收Runnable接口子类对象,同时设置线程名称)
public class line_realize extends Thread{ //定义线程主体类 private String title; <span style="font-family: Arial, Helvetica, sans-serif;">//定义所需要的属性</span> public line_realize(String title){ this.title = title; } @Override public void run(){ //线程的主方法 for(int x = 0;x < 5;x++) { System.out.println(this.title + "run,x="+x); } } }
<pre name="code" class="java"> (1.1)错误的线程操作
<pre name="code" class="java">public class line_realize_Error { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub line_realize L1 = new line_realize("one"); //创建线程对象 line_realize L2 = new line_realize("two"); line_realize L3 = new line_realize("theer"); L1.run(); //调用覆写的run()方法 L2.run(); L3.run(); } }
(1.1.1)错误的运行结果
可以从运行结果看出,所谓的线程是按照我们的书写顺序完成的,所以以上的操作并没有真正的启动多线程。因为启动多线程有一个特点就是线程彼此之间是交替运行的。想要在程序中真正的启动多线程必须依靠Thread类的方法public
void start(),表示真正的启动多线程,调用此方法后将间接调用run()方法。
(1.2)正确的线程操作方法
public class line_realize_true { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub line_realize L1 = new line_realize("one"); //创建线程对象 line_realize L2 = new line_realize("two"); line_realize L3 = new line_realize("three"); L1.start(); L2.start(); L3.start(); //启动线程 } }
结果是交替的:tworun,x=0 onerun,x=0 threerun,x=0 onerun,x=1 tworun,x=1 onerun,x=2 threerun,x=1 onerun,x=3 tworun,x=2 onerun,x=4 threerun,x=2 threerun,x=3 tworun,x=3 threerun,x=4 tworun,x=4(2)实现Runnabel接口
public class line_realize2 implements Runnable{ private String title; <span style="font-family: Arial, Helvetica, sans-serif;">//定义所需要的属性</span> public line_realize2(String title){ this.title = title; } @Override public void run() //线程主方法 { for(int x = 0;x < 5;x ++){ System.out.println(this.title+" run,x="+x); } } } 实现方法: public class line_realize_true { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub line_realize2 L1 = new line_realize2("one"); //创建线程对象 line_realize2 L2 = new line_realize2("two"); line_realize2 L3 = new line_realize2("three"); new Thread(L1).start(); new Thread(L2).start(); new Thread(L3).start(); } }
相关文章推荐
- java反射机制初探
- MyEcplise 破解之道
- java正则表达式简单介绍
- 《 JAVA 核心技术 基础知识》 第五章 笔记
- 华为OJ-名字的漂亮程度(Java)
- java-Date、String、Calendar转化
- Java字符串的10大热点问题盘点
- 用JAVA接口声明一个变量是什么意思?
- eclipse的Android项目不能运行
- java中&和&&的区别
- java POI实现向Excel中插入图片
- Java虚拟机类加载机制浅谈
- Spring Quartz Java工程版和Web工程版示例
- 使用java理解程序逻辑 第三章 选择结构一
- spring配置文件命名空间读取顺序
- [原创]Java中字符串、数组、集合及JSONArray的长度属性
- springmvc 整合多个数据源
- Struts DispatchAction Example
- Java中toString()方法的使用
- Struts ForwardAction Example