JAVA学习笔记49——线程概念+进程、线程区别+创建进程三种方法
2015-03-02 19:30
836 查看
最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。
本篇开始讲线程,先来介绍一下程序、进程、线程的概念,其实学过《操作系统》的童鞋应该都不陌生了:
1、程序:指令集 静态概念。2、进程:操作系统 调度程序 动态概念。3、线程:在进程内多条执行路径(在单核CPU下其实是一个虚拟、模拟的过程,真正的多线程是在多个CPU的前提下进行的)
再来看看进程、线程的具体区别总结;
接下来,介绍线程创建的三种方法:
NO.1:通过继承来实现多线程:下图所示,注:继承自Thread的类运行的入口时run方法而不再是main方法。
示例代码:
下面这段代码介绍的是一种“静态代理”思想的示例代码,具体的解释说明在代码的注释部分中:
实例代码:
本篇开始讲线程,先来介绍一下程序、进程、线程的概念,其实学过《操作系统》的童鞋应该都不陌生了:
1、程序:指令集 静态概念。2、进程:操作系统 调度程序 动态概念。3、线程:在进程内多条执行路径(在单核CPU下其实是一个虚拟、模拟的过程,真正的多线程是在多个CPU的前提下进行的)
再来看看进程、线程的具体区别总结;
接下来,介绍线程创建的三种方法:
NO.1:通过继承来实现多线程:下图所示,注:继承自Thread的类运行的入口时run方法而不再是main方法。
示例代码:
<span style="font-size:14px;">package com.bjsxt.thread.create; /** * 模拟龟兔赛跑 1、创建多线程 继承 Thread +重写run(线程体) 2、使用线程: 创建子类对象 + 对象.start() 线程启动 */ public class Rabbit extends Thread { @Override public void run() { //线程体 for(int i=0;i<100;i++){ System.out.println("兔子跑了"+i+"步"); } } } class Tortoise extends Thread { @Override public void run() { //线程体 for(int i=0;i<100;i++){ System.out.println("乌龟跑了"+i+"步"); } } }</span>
<span style="font-size:14px;">import com.bjsxt.thread.create.Rabbit; public class RabbitApp { public static void main(String[] args) { //第一步:创建子类对象 Rabbit rab = new Rabbit(); Tortoise tor =new Tortoise(); //第二步:为了开辟多条路径应该调用start 方法,之后经由CPU自主掌控(建议使用);如果是让各个线程有序执行则调用run方法(不建议使用) rab.start(); //rab.run(); tor.start(); //tor.run(); for(int i=0;i<1000;i++){ System.out.println("main==>"+i); } } } </span>NO.2:通过实现Runnable接口来实现多线程:下图所示:
下面这段代码介绍的是一种“静态代理”思想的示例代码,具体的解释说明在代码的注释部分中:
<span style="font-size:14px;">/** * 静态代理 设计模式 * 1、真实角色 * 2、代理角色: 持有真实角色的引用 * 3、二者 实现相同的接口 */ public class StaticProxy { public static void main(String[] args) { //创建真实角色 Marry you =new You(); //创建代理角色 +真实角色的引用 WeddingCompany company =new WeddingCompany(you); //执行任务 company.marry(); } } //接口 interface Marry{ public abstract void marry(); } //真实角色 class You implements Marry{ @Override public void marry() { System.out.println("you and XX结婚了...."); } } //代理角色 class WeddingCompany implements Marry{ private Marry you; public WeddingCompany() { } public WeddingCompany(Marry you) { this.you = you; } private void before(){ System.out.println("布置...."); } private void after(){ System.out.println("闹洞房...."); } @Override public void marry() { before(); you.marry(); after(); } }</span>NO.3:通过实现Callable接口来实现多线程:下图所示:
实例代码:
<span style="font-size:14px;">import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * 使用Callable创建线程 */ public class Call { public static void main(String[] args) throws InterruptedException, ExecutionException { //创建线程 ExecutorService ser=Executors.newFixedThreadPool(2); Race tortoise = new Race("老不死",1000); Race rabbit = new Race("小兔子",500); //获取值 Future<Integer> result1 =ser.submit(tortoise) ; Future<Integer> result2 =ser.submit(rabbit) ; Thread.sleep(2000); //2秒 tortoise.setFlag(false); //停止线程体循环 rabbit.setFlag(false); int num1 =result1.get(); int num2 =result2.get(); System.out.println("乌龟跑了-->"+num1+"步"); System.out.println("小兔子跑了-->"+num2+"步"); //停止服务 ser.shutdownNow(); } } class Race implements Callable<Integer>{ private String name ; //名称 private long time; //延时时间 private boolean flag =true; private int step =0; //步 public Race() { } public Race(String name) { super(); this.name = name; } public Race(String name,long time) { super(); this.name = name; this.time =time; } @Override public Integer call() throws Exception { while(flag){ Thread.sleep(time); //延时 step++; } return step; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } public int getStep() { return step; } public void setStep(int step) { this.step = step; } }</span>
相关文章推荐
- 线程学习笔记【1】----进程、线程概念及创建线程
- 0036 Java学习笔记-多线程-创建线程的三种方式
- 【Java学习笔记之六】java三种循环(for,while,do......while)的使用方法及区别
- Java多线程学习总结——线程与进程的概念、区别与联系
- JAVA并发编程学习笔记------线程的三种创建方式
- java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器
- Java学习笔记42:线程的几个方法和概念
- java中创建线程的三种方法以及区别
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- Java6学习笔记55——多线程编程——线程的创建方法1
- JNI学习笔记:(1)开篇(2)本地代码访问Java代码 (3)本地方法取得Java属性/调用java方法 (4)本地代码创建Java对象(包括javaString) (5) 本地方法处理java数组
- 七、初学Java多线程:向线程传递数据的三种方法(没感觉三种方法有什么区别?)
- Linux进程线程学习笔记:进程创建
- Java基础学习笔记(十)线程的创建总结
- java 创建线程的三种方法Callable,Runnable,Thread比较及用法
- Java 创建线程的三种方法比较
- java学习笔记-线程和进程-黑马
- java创建两个线程的方法和它们的区别
- java学习日记(5)——创建线程的两种基本方法
- Linux进程线程学习笔记:进程创建