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.1.什么是线程池? 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程.线程池中线程的数量通常完全取决于可用内存数量和应用程 ...

  2. 多线程之终止线程的四种方法

    终止线程的四种方法 第一种:正常运行结束 第二种:使用退出标志退出线程 第三种:interrupt()方法退出 第四种:stop方法退出 第一种:正常运行结束 这种就是程序正常执行完run方法或者ce ...

  3. Java线程池的四种创建方式

    Java线程池的四种创建方式 Java使用Thread类来表示线程,所有的线程都是Thread类或者是他的子类.Java有四种方式来创建线程. (1)继承Thread类创建线程 (2)实现Runnab ...

  4. android 多线程间通信,android实现线程间通信的四种常见方式

    1,通过Handler机制 主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递conten ...

  5. java怎样输入五个数字打一成语,Java的线程安全四种方式五个等级[1]

    Java的线程安全四种方式五个等级[1]以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 四种方式 sychronized ...

  6. Java创建并执行线程的四种方法

    Java创建并执行线程的四种方法 java里面创建线程有四种方式: 无返回: 实现Runnable接口,重写run(); 继承Thread类,重写run(); 有返回: 实现Callable接口,重写 ...

  7. java中创建线程的四种方式及线程池详解

    众所周知,我们在创建线程时有四种方法可以用,分别是: 1.继承Thread类创建线程 2.实现Runnable接口创建线程 3.使用Callable和Future创建线程 4.使用线程池创建(使用ja ...

  8. 创建线程的四种方式(Thread、Runnable、线程池、Callable)

    目录 一.直接继承Thread类,然后重写run方法 二.实现Runnable接口 三.线程池创建 四.实现Callable接口 创建线程有四种方式:1.继承Thread类   2.实现Runnabl ...

  9. Java 并发 多线程:创建线程的四种方式

    Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...

  10. java方法生命周期_Java线程的第二种实现方式以及生命周期

    上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...

最新文章

  1. 卡尔曼滤波算法c语言stm32,卡尔曼滤波算法及C语言实现_源代码
  2. Redis总结(五)缓存雪崩和缓存穿透等问题
  3. 想拥有一台属于你自己的无人机嘛?
  4. html制作表格保存为txt文件,可将HTML表格导出为Excel|csv|txt文件的jQuery插件
  5. C memset 踩坑
  6. 【CSS系列】CSS 实现必填项前/后添加红色星号
  7. [django]django模型中auto_now和auto_now_add
  8. 终于迎来大改变!iPhone 14全系标配120Hz高刷屏+6GB内存
  9. 热水器是长期开着好还是要等到用的时候才开?
  10. 互联网产品开发中的“快”字诀
  11. 过期不候--具备生命周期的数据的技术实现方案
  12. vs2010安装番茄插件
  13. MySQL创建数据库、数据表 | 零基础自学SQL课程系列Day3
  14. 计算机如何打开无线网络适配器,如何解决网络适配器无法启动无线网卡的问题...
  15. 雷军与陈年是真爱:凡客即将“小米化”改造
  16. [转载]无盘网吧实际施工过程中的注意事项(转)
  17. 目标检测_精确定位_2020
  18. centos memcache
  19. 【mysql】dump
  20. 【机房收费系统】日、周结账单

热门文章

  1. 将DataGrid中的数据导出为Excel的方法
  2. 求知若渴,一份15选8的套餐给你
  3. 设计模式学习总结7 - 行为型2 - Command命令模式
  4. BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP
  5. Ambari集群里操作时典型权限问题put: `/home/bigdata/1.txt': No such file or directory的解决方案(图文详解)...
  6. 关于Stm32定时器+ADC+DMA进行AD采样的实现
  7. canvas width/height和style.width/style.height
  8. javascript的table 对象 属性 方法
  9. Linux第二周考试题
  10. 这 8款开源思维导图工具真的很神奇【程序员必备学习工具】