java多线程基本方法(3)
来源:互联网 发布:e宠商城淘宝店 编辑:程序博客网 时间:2024/05/18 21:50
JAVA 的多线程特性是它的一大优点。多线程是相对单线程而言的,单线程是指任何时候只能有一个程序在运行,其他程序必须等待。而有了多线程这个特性后,JAVA 可以支持多个程序并发执行。当你要写一个能同时执行多个功能的程序时,就需要用到JAVA 的多线程功能。JAVA 的多线程功能被封装在线程类中。
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口
1. 使用继承 Thread 类的方法实现多线程
package com.zsc.everyday;//使用继承 Thread 类的方法实现多线程public class FirstThread extends Thread {private int i ;//重写 run 方法,run方法中的方法是现成的执行方法public void run(){for(;i<5;i++){// getName() 函数是获取线程名称System.out.println(getName()+"、"+i);}}public static void main(String[] args) {for(int i =0 ;i<5;i++){System.out.println(Thread.currentThread().getName()+"、"+i);if(i==2){//创建第一条线程,使用start()new FirstThread().start();new FirstThread().start();}}}}
2. 通过实现Runnable接口:
package com.zsc.everyday;//通过实现 Runnable 接口的方式实现多线程public class SecondThread implements Runnable {private int i ;//重写 run 方法,run方法中的方法是现成的执行方法public void run(){for(;i<5;i++){//获取线程名称 只能使用 Thread.currentThread().getName()System.out.println(Thread.currentThread().getName()+"、"+i);}}public static void main(String[] args) {for(int i =0 ;i<5;i++){System.out.println(Thread.currentThread().getName()+"、"+i);if(i==2){SecondThread st = new SecondThread();//通过 new Thread(target,name).start(); 创建线程new Thread(st,"新线程1").start();new Thread(st,"新线程2").start();}}}}
3. 两种实现多线程的区别:
在使用Thread的时候只需要new一个实例出来,调用start()方法即可以启动一个线程。
Thread Test = new Thread();
Test.start();
在使用Runnable的时候需要先new一个继承Runnable的实例,之后用子类Thread调用。
Test impelements Runnable
Test t = new Test();
Thread test = new Thread(t);
两种实现范式的区别:
Thread是用extends继承;
而Runnable是用implements继承,即实现抽象类;
如果你用extends继承了别的类,还想实现线程,那就用Runnable;
反之用Thread。
4. 控制线程
jion 线程:java让一个线程等另一个线程的方法:jion() 方法;
package com.zsc.everyday;// join 方法 控制线程public class JoinThread extends Thread{//提供一个有参数的构造器,用于设置该线程的名字public JoinThread(String name){super(name);}// 重写 run 方法,定义线程执行体public void run(){for(int i=0;i<5;i++){//获取线程名称 只能使用 Thread.currentThread().getName()System.out.println(Thread.currentThread().getName()+"、"+i);}}public static void main(String[] args) throws Exception {//启动子线程new JoinThread("新线程1").start();for(int i =0 ;i<5;i++){if(i==2){JoinThread jt = new JoinThread("被join的线程");//通过 new Thread(target,name).start(); 创建线程jt.start();// main线程调用了jt线程的join 方法,main 线程// 必须等jt 执行结束才会向下执行jt.join();}System.out.println(Thread.currentThread().getName()+"、"+i);}}}运行结果:
main、0main、1新线程1、0新线程1、1新线程1、2新线程1、3新线程1、4被join的线程、0被join的线程、1被join的线程、2被join的线程、3被join的线程、4main、2main、3main、4
5. 后台线程:他是在后台运行的,任务是为其他线程服务。
特征:如所有的前台线程都死亡了后,后台线程才会消亡。
代码:
package com.zsc.everyday;// Daemon Thread 后台线程public class DaemonThread extends Thread{// 重写 run 方法,定义线程执行体public void run(){for(int i=0;i<5;i++){//获取线程名称 只能使用 Thread.currentThread().getName()System.out.println(Thread.currentThread().getName()+"、"+i);}}public static void main(String[] args) throws Exception {DaemonThread t = new DaemonThread();//将此线程设置为后台线程t.setDaemon(true);//启动后台线程t.start();for(int i =0 ;i<5;i++){System.out.println(Thread.currentThread().getName()+"、"+i);}//程序执行到此处 前台程序(main线程结束)//后台线程也随之结束}}
运行结果:
main、0main、1main、2main、3main、4Thread-0、0Thread-0、1Thread-0、2Thread-0、3Thread-0、46. 线程睡眠 让当前线程停止一段时间,并进入阻塞状态,则可以调用Thread类的静态方法 sleep();
代码:
package com.zsc.everyday;import java.sql.Timestamp;// 线程休眠public class SleepThread {public static void main(String[] args) throws Exception {Timestamp start = new Timestamp(System.currentTimeMillis());System.out.println(start);//线程休眠3秒Thread.sleep(3000);Timestamp end = new Timestamp(System.currentTimeMillis());System.out.println(end);}}运行结果:
2011-12-23 12:50:57.7382011-12-23 12:51:00.755
- java多线程基本方法(3)
- java基本教程之join方法详解 java多线程教程
- java基本教程之join方法详解 java多线程
- Java 多线程CountDownLatch、CyclicBarrier、Thread.join方法基本用法
- Java多线程(一)基本用法
- Java-多线程基本
- JAVA多线程--基本特性
- Java多线程-基本使用
- Java多线程(一)Java多线程传统实现方法
- java多线程(3)Thread的静态方法
- java基本入门----多线程2
- java 多线程基本操作总结
- Java多线程基本使用一
- Java实现多线程的3种方法
- java实现多线程的3种方法
- Java多线程Lock对象常用方法(3)
- Java实现多线程的方法-3种
- Java多线程3:Thread中的静态方法
- 将windows共享挂载到linux文件系统下
- android 加载大图片时报OOM的解决方案(源码)
- loadrunner 关联函数的高级应用
- Algorithms - 排序算法之二:快速排序
- PHP统计中英文字符个数的函数
- java多线程基本方法(3)
- PHP获取当前文件路径,上层目录路径
- java 输入/输出 IO流(4)
- 谈密码的管理方法
- 浅析 java5 新特性(5)
- java 新 IO(6)
- java 新特性 ----枚举(7)
- java 新特性 ----Annontation (8)
- checkGuard class