学习笔记——JAVA线程<1>线程的基本概念和实现
来源:互联网 发布:linux安装zip文件 编辑:程序博客网 时间:2024/06/05 14:52
线程:Thread,是进程中的一个“单一的连续的控制流程”(a single sequential flow of control)/执行路径
1.线程又被称为 轻量级进程(lightweight process)
2.Threads run at the same time ,independently of one another
3.一个进程可以拥有多个并行的(concurrent)线程
4.一个进程中的线程共享相同的内存单元/内存地址空间->可以访问相同的变量和对象,而且他们从同一堆中分配对象->通信,数据交换,同步操作(容易造成并发)
5.由于线程间的通信是在同一地址空间进行的,所以不需要额外的通信机制,这就使得通信更简便而且信息传递的速度也快
实现多线程
1>继承Thread+run()实现
package study;/*** * 1.创建多线程 继承Thread +重写run(线程体) * 2.使用线程 创建子类对象 +调用对象的star()方法 线程的启动 * 3. * @author http://blog.csdn.net/thewaiting * */public class ThreadDome extends Thread{ @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("第"+i); } } public static void main(String[] args) { ThreadDome t1= new ThreadDome(); ThreadDome t2= new ThreadDome(); t1.start();//不要调用run方法 t2.start(); }}
2>使用Runnable创建线程
1),避免单继承的局限性
2),比喻共享资源
可以共同使用真实角色里的数据
package study;/** * 静态代理 设计模式 * 1.真实角色 * 2.代理角色:持有真实角色的引用 * 3.二者实现相同的接口 * * 使用Runnable创建线程 * 1.类实现Runnable接口+重run() -->真是角色类 * 1),创建真是角色 * 2),创建代理角色+真实角色的引用 * 3),调用.star()方法 启动线程 * @author http://blog.csdn.net/thewaiting * */public class ThreadDome implements Runnable { //共同使用i资源 private int i = 5; @Override public void run() { while (true) { if (i <= 0) { break; } System.out.println(Thread.currentThread().getName() + i--); } } public static void main(String[] args) { // 1),创建真是角色 ThreadDome td1 = new ThreadDome(); // 2),创建代理角色+真实角色的引用 Thread t1 = new Thread(td1, "线程 1 "); Thread t2 = new Thread(td1, "线程 2 "); // 3),调用.star()方法 启动线程 t1.start(); t2.start(); //一步到位的方法 不过不能共享资源 new Thread(new ThreadDome(), "线程3 ").start(); }}
3>使用Callable创建线程
1>能返回值
2>能对外声明异常
package study;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创建线程 * @author http://blog.csdn.net/thewaiting */public class ThreadDome { public static void main(String[] args) { //执行器调度器 //创建线程 ExecutorService ser = Executors.newFixedThreadPool(1); Theard1 t1 = new Theard1("线程一",100); Theard1 t2 = new Theard1("线程二",20); //@param 实现类对象 //获取值 Future<Integer> result1 = ser.submit(t1); Future<Integer> result2 = ser.submit(t2); try { Thread.sleep(2000);//执行的时间 t1.setFlag(false);//停止线程体循环 t2.setFlag(false); int num1 = result1.get(); int num2 = result2.get(); System.out.println("线程一"+num1); System.out.println("线程二"+num2); //停止服务 ser.shutdown(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }}class Theard1 implements Callable<Integer>{ private String name;//名称 private long time;//延时时间 private boolean flag = true;// private int num = 0;//数量的增加 public Theard1(String name,long time) { this.name = name; this.time = time; } @Override public Integer call() throws Exception { while(flag){ Thread.sleep(time);//延时 num++; } return num; } 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 getNum() { return num; } public void setNum(int num) { this.num = num; }}
阅读全文
0 0
- 学习笔记——JAVA线程<1>线程的基本概念和实现
- java线程学习1——线程基本概念和操作
- 学习笔记——JAVA线程<2>线程的状态
- 学习笔记——JAVA线程<3>线程的基本信息
- 学习笔记——JAVA线程<4>线程的同步
- 学习笔记——JAVA线程<5>线程的死锁
- 学习笔记——JAVA线程<7>线程的总结
- Java线程和多线程(一)——线程的基本概念
- Java线程和线程池学习笔记
- java线程基本概念及实现
- java线程学习(1)—线程安全
- 孙鑫VC学习笔记:第十五讲 进程和线程基本概念
- 1、线程的基本概念
- Java线程学习和笔记——黑马训练营
- Java线程的学习笔记
- java线程的基本概念&&生命周期
- Java 学习笔记——线程
- java线程——学习笔记
- iOS 开发获取验证码倒计时
- Android 启动页面简单优化
- ファイル読み取りおよび出力
- Hive数据仓库相关操作
- 创业公司的 Nodejs 工程师
- 学习笔记——JAVA线程<1>线程的基本概念和实现
- VC/MFC 获取汉字拼音首字母(unicode编码)
- 精通MVC架构_2.1MVC架构
- 中国的支付清算体系!
- 【hadoop】ssh localhost 免密码登陆
- 时序数据库如何支持秒级上亿数据的查询分组和聚合运算
- Spring整合Shiro从源码探究机制
- java: axis2 客户端调用三种方法
- 如何成为一名优秀的全栈工程师