`
Lirongheng
  • 浏览: 4807 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA--线程的创建和一些安全问题

阅读更多
创建线程的目的?
创建线程的目的是为了开启一条执行路径去运行指定的代码和其他代码实现同时运行,而运行的指定代码就是这个执行路径任务。一般多线程至少也要两个线程,主线程和自定义的线程,主线程的任务定义在主函数中。

如何创建一个线程?
就暂时我知道的四种方式来创建一个线程
创建线程方法一:继承Thread类
步骤:
1. 定义一个类继承Thread
2. 覆盖Thread类中run方法
3. 直接创建Thread的子类对象创建线程
4. 调用start方法开启线程并调用线程的任务run方法执行
[img][/img]


 
创建线程方式二:实现Runnable接口
1. 定义类去实现Runnable接口
2. 覆盖接口中run方法,将线程的任务代码封装到run方法中去
3. 通过创建Thread类创建线程对象,并将Runnable接口中的子对象作为Thread类构造函数的参数进行传递
注:为什么?因为线程的任务都封装在Runnable接口子类对象的run方法中。所以要在线程对象创建时就必须明确要运行的任务
5. 调用线程对象的start方法开启线程
[img][/img]



创建线程方式三:以内部类的方式来创建线程
[img][/img]


在程序中使用匿名内部类创建线程十分方便,在一个方法调用中就可以启动一个线程,而且这个线程还可以直接调用类中的属性和方法;特别注意的是,在方法中启动匿名内部线程 时,如要向这个线程的 run 方法内传递参数,在创建方法中这个参数必须定义为 final 类型

创建线程方式四:这种凡事也是通过每部创建一个内部类来来继承TimerTask来实现的,但是这种方法是我掌握得不好。。。这个还要好好研究研究。。。。

多线程的一些安全问题:
比如说:有100张票,为了提高效率,我们可以用四个线程把这一百张票买完
下面的代码
[img][/img]


这个代码输出的结果是一共卖出了四百张票,这不是我们能够接受的结果
多线程安全问题产生的原因:
1.多个线程在操作共享的数据
2.操作共享数据的线程有多条,当一个线程在执行操作共享数据额多条代码过程中,其他线程参与了运算就会导致线程的安全问题


解决线程安全问题思路:
我们可以将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程不可以参与运算。必须要当前线程这些代码都执行完了其他线程才能参与运算,那么有什么办法可以解决这些问题呢?用同步可以解决这些问题,上述代码出现这种问题是因为四个线程同时在执行
[img][/img]


我们可以用同步代码块的方式来解决这个问题,只需要对代码坐车下面修改
[img][/img]


当然除了同步代码块的方式,还可以用同步方法的方式来解决这个问题,这两种方法的使用方式为:
1.同步代码块:
synchronized(对象){
     需要同步的代码
}
2.同步方法:
如:pubic synchronized int (方法名){}
  • 大小: 25.9 KB
  • 大小: 28.9 KB
  • 大小: 28.4 KB
  • 大小: 39.6 KB
  • 大小: 15.9 KB
  • 大小: 32.8 KB
分享到:
评论

相关推荐

    java线程详解

    Java线程:创建与启动 Java线程:线程状态的转换 Java线程:线程的同步与锁 一、同步问题提出 二、同步和锁定 三、静态方法同步 四、如果线程不能不能获得锁会怎么样 五、何时需要同步 六、线程安全类 七、...

    java-多线程学习代码.zip

    * ThreadTestDome1 练习:创建两个线程 其中一个线程遍历100以内的偶数 另一个遍历一百内奇数 采用第一种 extends来创建线程 * * 卖票窗口: * WindowTest1:不安全的继承Thread方法 * WindowTest2:不安全的...

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    本资源包“Java多线程与线程安全实践-基于Http协议的断点续传....通过这个实践项目,学生不仅能够加深对Java多线程和线程安全概念的理解,还能提升解决实际问题的能力,为未来的软件开发工作打下坚实的基础。重新回答||

    java 多线程设计模式 进程详解

    《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口的线程 线程的生命周期 线程命名 ...

    Java多线程与线程安全实践-基于Http协议的断点续传的实现.rar

    可以使用Java中的多线程技术,例如通过创建多个线程同时下载文件的不同部分,从而提高下载速度和效率。 断点续传设计:为了支持断点续传,需要在下载过程中记录已下载的文件部分,并在下次下载时从断点处继续下载。...

    什么是线程?Java中如何创建和管理线程?(java面试题附答案).txt

    除了基本的线程创建和启动,Java还提供了一些管理线程的方法和工具,例如: sleep 方法:使当前线程暂停执行一段时间。 join 方法:等待其他线程执行完毕后再继续执行。 interrupt 方法:中断线程的执行。 ...

    Java高级程序设计-多线程(二).pptx

    3.1 同步代码块 线程安全问题 同步代码块的使用 使用多线程模拟猴子采花 20 25 Java高级程序设计-多线程(二)全文共34页,当前为第4页。 3.1 线程安全 多线程编程时,由于系统对线程的调度具有一定的随机性,所以,...

    java经典面试题目-面经-java-Java语言的进阶概念-常用的库和框架-并发编程-网络编程-Web开发-面经

    如何实现线程安全的单例模式? 什么是Java中的生命周期回调方法?列举一些常见的生命周期回调方法。 什么是Java中的注解处理器?如何自定义和使用注解处理器? 什么是Java中的并发编程?列举一些常见的并发类和...

    Java多线程.pdf

    Java多线程复习笔记,包括线程创建,关键字讲解,线程池等等。

    突破JAVA万人面试,懂多线程者得天下.zip

    04.线程创建继承 thread美avi 05线程创建实现 Runnable接口avi 06线程创建实现 Callable接口avi 07线程创建线程池创建线程avi 08线程创建小结av 09线程生命周期avi 10.线程安全问题什么是线程安全avi 11线程安全同题...

    线程安全型双向链表的实现

    操作系统c++编程实现安全型双向链表,线程的创建,利用线程对链表进行增删改操作,并检验结果是否正确

    java 多线程同步

    java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util....通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性。

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的...

    java枚举是如何保证线程安全的

    主要介绍了java枚举是如何保证线程安全的。Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用...

    基于Java实现多线程与线程安全实践-基于Http协议的断点续传源码

    Java是一种面向对象的编程语言,它具有安全、可靠、...Java程序中的对象可以通过类进行定义和创建,类是一种抽象的概念,它描述了一类具有相同属性和方法的对象。 更多项目内容可以直接下载查看,内容有完整项目源码。

    java 线程安全 是程序执行流的最小单元

    线程(thread),有时被称为轻量级进程...一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

    java实现单例模式-懒汉模式(线程不安全

    懒汉模式是延迟加载的方式,在首次调用getInstance()方法时才会创建实例;

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)-共448页.docx

    java多线程编程 java ee基础1 java面向对象编程--数据库编程-->java se java 基础2 html--css--javascript-->div+css java ee中级部分 Servlet--Jsp-->mvc模式 java ee高级部分 Struts--Ejb--Hibernate--Spring--...

    java实现单例模式-饿汉模式(线程安全)

    饿汉模式在类加载时就创建了实例

Global site tag (gtag.js) - Google Analytics