线程的四种实现方式,一些方法及线程的同步
Java多线程实现的方式有四种
1.继承Thread类,重写run方法
2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
3.通过Callable和FutureTask创建线程
4.通过线程池创建线程
前面两种可以归结为一类:无返回值,原因很简单,通过重写run方法,run方式的返回值是void,所以没有办法返回结果
后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个方法的返回值是Object,所以返回的结果可以放在Object对象中
线程的几个方法:
join
* 让调用的线程先执行指定时间或执行完毕
中断线程的方法:
* 中断线程:
* 1.使用interrupt方法,中断线程,设置一个中断状态(标记),但是很多方法会清除此标记
* 2.使用自定义标记的方式
守护线程:
t.setDaemon(true);
//把线程设置为守护线程/*线程可以分为守护线程和用户线程,当进程中没有用户线程时,jvm会退出*/
线程的同步:
* 1.多线程同享数据时,会发生线程不安全的情况()
* 2.多线程共享数据必须使用同步
* 同步三种方法
* 1.使用同步代码块
class MyThread implements Runnable{ private int ticket=10;//private Object obj=new Object();//同步锁 public void run(){ for (int i=0;i<50;i++){// synchronized (this){// ticket--;// try {// Thread.sleep(300);// } catch (InterruptedException e) {// e.printStackTrace();// }// System.out.println(Thread.currentThread().getName());// System.out.println("你购买的票剩余"+ticket+"张");// } method(); } }
* 2.使用同步方法
//同步的对象是当前对象
class MyThread implements Runnable{ public void run(){ for (int i=0;i<50;i++){ method(); } }
private synchronized void method(){ if (ticket>0){ ticket--; try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("你购买的票剩余"+ticket+"张"); }}
* 3.使用lock(更灵活的代码控制)
}//互斥锁ReentrantLock lock=new ReentrantLock();//lock实现同步private void method2(){ lock.lock();//锁 try { if (ticket>0){ ticket--; try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("你购买的票剩余"+ticket+"张"); } } finally { lock.unlock();//释放锁 }
多线程共享数据,会有安全问题,使用同步可以解决安全问题,但同时会牺牲性能,所以同步的代码块要尽量保持简短,把不随数据变化的
的相关代码块移除代码块,不要阻塞
转载于:https://www.cnblogs.com/duguo/p/10570238.html
线程的四种实现方式,一些方法及线程的同步相关推荐
- 线程池概念、线程池作用、线程池的四种创建方式
线程池 1.1.什么是线程池? 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程.线程池中线程的数量通常完全取决于可用内存数量和应用程 ...
- 多线程之终止线程的四种方法
终止线程的四种方法 第一种:正常运行结束 第二种:使用退出标志退出线程 第三种:interrupt()方法退出 第四种:stop方法退出 第一种:正常运行结束 这种就是程序正常执行完run方法或者ce ...
- Java线程池的四种创建方式
Java线程池的四种创建方式 Java使用Thread类来表示线程,所有的线程都是Thread类或者是他的子类.Java有四种方式来创建线程. (1)继承Thread类创建线程 (2)实现Runnab ...
- android 多线程间通信,android实现线程间通信的四种常见方式
1,通过Handler机制 主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递conten ...
- java怎样输入五个数字打一成语,Java的线程安全四种方式五个等级[1]
Java的线程安全四种方式五个等级[1]以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 四种方式 sychronized ...
- Java创建并执行线程的四种方法
Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...
- java中创建线程的四种方式及线程池详解
众所周知,我们在创建线程时有四种方法可以用,分别是: 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和Future创建线程 4.使用线程池创建(使用ja ...
- 创建线程的四种方式(Thread、Runnable、线程池、Callable)
目录 一.直接继承Thread类,然后重写run方法 二.实现Runnable接口 三.线程池创建 四.实现Callable接口 创建线程有四种方式:1.继承Thread类 2.实现Runnabl ...
- Java 并发 多线程:创建线程的四种方式
Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...
- java方法生命周期_Java线程的第二种实现方式以及生命周期
上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...
最新文章
- 卡尔曼滤波算法c语言stm32,卡尔曼滤波算法及C语言实现_源代码
- Redis总结(五)缓存雪崩和缓存穿透等问题
- 想拥有一台属于你自己的无人机嘛?
- html制作表格保存为txt文件,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
- C memset 踩坑
- 【CSS系列】CSS 实现必填项前/后添加红色星号
- [django]django模型中auto_now和auto_now_add
- 终于迎来大改变!iPhone 14全系标配120Hz高刷屏+6GB内存
- 热水器是长期开着好还是要等到用的时候才开?
- 互联网产品开发中的“快”字诀
- 过期不候--具备生命周期的数据的技术实现方案
- vs2010安装番茄插件
- MySQL创建数据库、数据表 | 零基础自学SQL课程系列Day3
- 计算机如何打开无线网络适配器,如何解决网络适配器无法启动无线网卡的问题...
- 雷军与陈年是真爱:凡客即将“小米化”改造
- [转载]无盘网吧实际施工过程中的注意事项(转)
- 目标检测_精确定位_2020
- centos memcache
- 【mysql】dump
- 【机房收费系统】日、周结账单
热门文章
- 将DataGrid中的数据导出为Excel的方法
- 求知若渴,一份15选8的套餐给你
- 设计模式学习总结7 - 行为型2 - Command命令模式
- BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP
- Ambari集群里操作时典型权限问题put: `/home/bigdata/1.txt': No such file or directory的解决方案(图文详解)...
- 关于Stm32定时器+ADC+DMA进行AD采样的实现
- canvas width/height和style.width/style.height
- javascript的table 对象 属性 方法
- Linux第二周考试题
- 这 8款开源思维导图工具真的很神奇【程序员必备学习工具】