博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建线程的方法 Thread Runnable
阅读量:6003 次
发布时间:2019-06-20

本文共 2753 字,大约阅读时间需要 9 分钟。

一:使用Theard的公共静态方法直接生成并控制,如下:
public class currentThread{   public static void main(String args[]){       Threadthread = Thread.currentThread();      System.out.println("线程名称是:"+thread.getName());      System.out.println("线程的优先级是:"+thread.getPriority());      thread.setName("thread one");      System.out.println("线程现在的名字是:" +thread.getName());      thread.setPriority(1);      System.out.println("线程现在的优先级是:" +thread.getPriority());             try{          for (int i =0; i < 5; i++) {            System.out.println(i);            thread.sleep(1000);         }       } catch(Exception e) {          // TODO:handle exception      }   }}



二:工程中最常用的方法,接口Runnable,如下:



public class newThreadimplements Runnable{//使用Runnable定义的子类中没有start()方法,只有Thread类中才有。此时观察Thread类,有一个构造方法:publicThread(Runnable targer)//此构造方法接受Runnable的子类实例,也就是说可以通过Thread类来启动Runnable实现的多线程。start()可以协调系统的资源;      //   newThread(){//       Threadthread = new Thread(this,"t_1");//直接重新命名//      System.out.println(thread);//      thread.start();//   }         newThread(String name){         };      //在正式方法中直接用newThread mt1=new newThread("线程1")就可以了   static newThread mt1=new newThread("线程1");         @Override   public void run() {       // TODOAuto-generated method stub   }      public static void main(String args[]){             //newnewThread();                   newThread(mt1).start();             try{          for (int i =0; i < 10; i++) {            System.out.println(i);            Thread.sleep(1000);         }       } catch(Exception e) {          // TODO:handle exception      }         }}
三:Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:
class MyThread extends Thread{    privateString name;    publicMyThread(String name) {       super();       this.name = name;    }    public voidrun(){       for(int i=0;i<10;i++){          System.out.println("线程开始:"+this.name+",i="+i);       }    }}package org.thread.demo;    public classThreadDemo01 {      public static void main(String[] args) {           MyThread mt1=new MyThread("线程a");          MyThread mt2=new MyThread("线程b");           mt1.run();           mt2.run();    }}
但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法。下面启动
start()方法启动线程:
package org.thread.demo;public class ThreadDemo01 {    publicstatic void main(String[] args) {       MyThread mt1=new MyThread("线程a");       MyThread mt2=new MyThread("线程b");       mt1.start();       mt2.start();    }};
这样程序可以正常完成交互式运行。那么为啥非要使用start();方法启动多线程呢?
在JDK的安装路径下,src.zip是全部的java源程序,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private native voidstart0();其中native关键字表示可以调用操作系统的底层函数,那么这样的技术成为JNI技术(java NativeInterface)

转载于:https://www.cnblogs.com/xiaowangba/archive/2012/12/11/6314397.html

你可能感兴趣的文章
jQuery选择器和事件
查看>>
十、syslog日志与loganalyzer日志管理
查看>>
Python多进程并发写入PostgreSQL数据表
查看>>
mysql 优化
查看>>
2.4 salt grains与pillar jinja的模板
查看>>
简单的验证码程序
查看>>
MySQL主从(介绍,配置主机,配置从机,测试主从同步)
查看>>
不同版本的outlook客户端配置Office 365 exchange online帐户需要安装的补丁
查看>>
Java服务器-resin
查看>>
Linux下搭建JDK和TOMCAT环境
查看>>
关闭windows休眠
查看>>
Ansible之十一:变量详解
查看>>
那些SCOM 管理包开发中遇到的坑1–Powershell scriptBlock Invoke执行结果的类型
查看>>
关于Server Sql 2008触发器的使用
查看>>
mac常见命令
查看>>
Redhat 系统相关调优参数注解
查看>>
nextus的使用
查看>>
Python自动化开发学习5-2-subprocess模块
查看>>
编程实现最小化窗口到桌面右下角图标的代码
查看>>
ELK stack实战之结合rsyslog分析系统日志(auth.log)
查看>>