java多线程 基础(二) Thread Runnable
来源:互联网 发布:coreldraw是什么软件 编辑:程序博客网 时间:2024/05/16 23:38
[线程的并发与并行]
在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。
[ 并发:(1)在CUP空闲的时候可以对某一个线程时行调度,运行
(2)当某一线程运行一部分后需要另一线程产生的结果,才能运行下去。
并行: 在多cup的情况下可以同时运行两个以上的线程的进候属于并行, 这些线程这间是独立的,并没有太多 的联系
]
[JAVA线程对象]
在JAVA中,要开始一个线程,有两种方式。
一 是直接调用Thread实例的start()方法
二 将Runable实例传给一个Thread实例然后调用它的start()方法。
生成一个线程的实例,并不代表启动了线程。而启动线程是说在某个线程对象上启动了该实例对应的线程,当该线程结束后,并不会就立即消失。
示例一 :
public class SongThread extends Thread{
private int x=0;
public void run(){
for(int i=0;i<100;i++){
try {
Thread.sleep(1);
System.out.println(x++);
} catch (InterruptedException e) {
System.out.println(x++);
}
}
}
//测试1:单独调动已经实例化的线程类。线程类SongThread并不是main中的主线程。所以会先运行system.out.println();
public static void main(String[] args){
SongThread songthread=new SongThread();
songthread.start();
System.out.println("songqiu");
}
//测试2:把SongThread类加入main主线程
// public static void main(String[] args){
// System.out.println("songqiu");
// SongThread songthread=new SongThread();
// songthread.start();
// try {
// songthread.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println("songqiu");
// }
//测试3:当线程类SongThread调用过一次start()方法后,然后在去调用一次start(),这个时候去发生异常
//异常产生的原因是:继承Thread抽象类的类,启动线程类只能产生一个线程,当这个线程类调用start()方法后,会自动结束线程的生命周期
// public static void main(String[] args){
// SongThread songthread =new SongThread();
//
// System.out.println("第一次调用线程songthread : 开始......");
// songthread.start();
// try {
// songthread.join();
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println("第一次调用线程songthread结束!");
// System.out.println("=================");
//
// System.out.println("第二次调用线程songthread : 开始......");
// try{
// songthread.start();
// System.out.println("第二次调用线程songthread结束!");
// }catch(IllegalThreadStateException e){
// System.out.println("第二次调用线程时发生异常!");
// }
// }
}
示例二:
public class SongRunnable implements Runnable{
private int x=0;
public void run() {
for(int i=0;i<100;i++){
try {
Thread.sleep(1);
System.out.println(x++);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//测试1:此类继承了接口Runnable,然后去实现run()方法,但此类要产生线程的话必须用Thread抽象类去包装
//此方法任可以加入main主线程
public static void main(String[] args){
new Thread(new SongRunnable()).start();
}
//测试2:产生多个线程,线程可以利用存贮区域里的变最
// public static void main(String[] args){
// SongThread songthread=new SongThread();
//
// for(int i=0;i<2;i++){
//
// System.out.println("第"+(i+1)+"调用线程,开始...");
// Thread threadRunnable =new Thread(songthread);
// threadRunnable.start();
// try {
// threadRunnable.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//
// System.out.println("第"+(i+1)+"调用线程结束。");
// System.out.println("==============================");
// }
// }
}
在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。
[ 并发:(1)在CUP空闲的时候可以对某一个线程时行调度,运行
(2)当某一线程运行一部分后需要另一线程产生的结果,才能运行下去。
并行: 在多cup的情况下可以同时运行两个以上的线程的进候属于并行, 这些线程这间是独立的,并没有太多 的联系
]
[JAVA线程对象]
在JAVA中,要开始一个线程,有两种方式。
一 是直接调用Thread实例的start()方法
二 将Runable实例传给一个Thread实例然后调用它的start()方法。
生成一个线程的实例,并不代表启动了线程。而启动线程是说在某个线程对象上启动了该实例对应的线程,当该线程结束后,并不会就立即消失。
示例一 :
public class SongThread extends Thread{
private int x=0;
public void run(){
for(int i=0;i<100;i++){
try {
Thread.sleep(1);
System.out.println(x++);
} catch (InterruptedException e) {
System.out.println(x++);
}
}
}
//测试1:单独调动已经实例化的线程类。线程类SongThread并不是main中的主线程。所以会先运行system.out.println();
public static void main(String[] args){
SongThread songthread=new SongThread();
songthread.start();
System.out.println("songqiu");
}
//测试2:把SongThread类加入main主线程
// public static void main(String[] args){
// System.out.println("songqiu");
// SongThread songthread=new SongThread();
// songthread.start();
// try {
// songthread.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println("songqiu");
// }
//测试3:当线程类SongThread调用过一次start()方法后,然后在去调用一次start(),这个时候去发生异常
//异常产生的原因是:继承Thread抽象类的类,启动线程类只能产生一个线程,当这个线程类调用start()方法后,会自动结束线程的生命周期
// public static void main(String[] args){
// SongThread songthread =new SongThread();
//
// System.out.println("第一次调用线程songthread : 开始......");
// songthread.start();
// try {
// songthread.join();
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println("第一次调用线程songthread结束!");
// System.out.println("=================");
//
// System.out.println("第二次调用线程songthread : 开始......");
// try{
// songthread.start();
// System.out.println("第二次调用线程songthread结束!");
// }catch(IllegalThreadStateException e){
// System.out.println("第二次调用线程时发生异常!");
// }
// }
}
示例二:
public class SongRunnable implements Runnable{
private int x=0;
public void run() {
for(int i=0;i<100;i++){
try {
Thread.sleep(1);
System.out.println(x++);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//测试1:此类继承了接口Runnable,然后去实现run()方法,但此类要产生线程的话必须用Thread抽象类去包装
//此方法任可以加入main主线程
public static void main(String[] args){
new Thread(new SongRunnable()).start();
}
//测试2:产生多个线程,线程可以利用存贮区域里的变最
// public static void main(String[] args){
// SongThread songthread=new SongThread();
//
// for(int i=0;i<2;i++){
//
// System.out.println("第"+(i+1)+"调用线程,开始...");
// Thread threadRunnable =new Thread(songthread);
// threadRunnable.start();
// try {
// threadRunnable.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//
// System.out.println("第"+(i+1)+"调用线程结束。");
// System.out.println("==============================");
// }
// }
}
- java多线程 基础(二) Thread Runnable
- JAVA多线程:Thread、Runnable
- 多线程二,Java多线程thread和runnable区别简介
- Runnable和Thread基础---多线程学习笔记(二)
- Thread多线程(二):Runnable
- Java多线程(二) Thread和Runnable的基本用法
- Java多线程Thread,Runnable, Callable<>和线程池(二)
- Java多线程基础-2-简单继承Thread,实现Runnable例子
- java多线程 Thread 和Runnable
- java 多线程(Thread,Runnable)
- java多线程 Thread 和Runnable
- java多线程Thread和Runnable
- Java多线程Thread与Runnable
- Java多线程--Runnable和Thread
- JAVA多线程之Thread&&Runnable
- Java -- Thread 和 Runnable 多线程
- Java多线程--认识多线程(Thread、Runnable)
- java 多线程 Thread与Runnable的区别
- 协同OA流程化 BPM布局企业信息化
- 不同编译器下基本数据长度
- 程序员调试能力和相关书籍
- 章海东:剖析BPM在协同软件中的作用
- 纯做技术是自娱自乐 抛开技术做技术才是出路
- java多线程 基础(二) Thread Runnable
- Web开发设计的五大准则
- 百度热门关键字手法大揭密
- Joel Spolsky在耶鲁大学的演讲(上)转自阮一峰的网络日志
- ATPCS...
- 最近学习忙,下载东西没积分
- Asterisk developer/'s documentation 翻译计划 by serva
- 人生成熟的四个重要标志
- WinDbg配置和使用基础