java基础多线程

原创 2015年11月20日 22:06:54



多线程

进程:正在运行的程序,每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元

 

线程:就是进程中的一个建立的控制单元,线程在控制着进程的执行。一个进程至少有一个线程

 

主线程运行的代码在main中。

 

多线程存在的意义:

1可以使程序中同时进行

2提高效率

 

 

多线程的创建方式

              继承Thread类覆盖run方法

              ClassDemo extends Thread

              {

              Public void run()

              {

                       For(intx = 0; x < 60; x++);

}

}

             

文本框: 临时状态Thread类中start方法是开启线程,并调用run方法

 

文本框: sleep(time)文本框: Start()线程的状态:

文本框: Stop()文本框: 消亡文本框: 冻结文本框: Wait()文本框: 运行                        

 

 文本框: 被创建

 

 

 

 

 

 

 

 

线程都有自己默认的名称Thread-编号,编号从0开始

获取当前线程对象:static Thread currentThread()

getName():获取线程名称

setName():设置线程名称

 

 

 

创建线程的第二种方法

步骤:

  1. 定义类实现Runnable接口

  2. 覆盖Runnable接口中的run方法

  3. 通过Thread类建立线程对象

  4. Runnable接口的子类对象作为实际参数传递Thread类的构造函数。

  5. 调用Thread类的start方法开启线程并调用Runnable接口子类的run方法

 

Class  testimplements Runnable

{

              Publicvoid run()

              {

                            System.out.println(“xianchenger”);

}

}                                       

 

Test t =  newtest();

 

实现方式和继承方式有什么区别呢?

实现方式:避免了单继承的局限性

在定义线程时,建议使用实现方式

 

多线程运行出现了安全问题。

问题的原因:

              当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据的报错。

解决办法:

              对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以死参与执行。

 

Java对于多线程的安全问题提供了专业的解决方式

就是同步代码块。

Syschonized(对象)

{

              需要被同步的代码

}

对象如同一把锁,持有锁的线程能在同步中运行,没有锁的线程即使有cpu运行前也不能进入同步代码块

 

同步的前提:

  1. 必须要有两个或者两个以上的线程

  2. 必须是多个线程使用同一个锁

好处:解决多线程的安全问题

弊端:多个线程需要判断锁,较为消耗资源

如何查找问题:

  1. 明确哪些代码是多线程运行代码

  2. 明确共享数据

  3. 明确多线程运行代码中哪些语句是操作共享数据的

 

函数和同步都是封装代码

Syschonized放在函数上,函数就具备了同步性

 

同步函数用的是哪一个锁呢:

              函数需要被对象调用。那么函数都有一个所属对象引用,就是this。所以同步函数使用的锁是this

 

如果同步函数被静态修饰后,使用的锁是什么呢?

              发现不是this,因为今天方法中也不可以定义this。静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象。类名.class,该对象的类型是class

 

静态的同步方法,使用的是该方法所在类的字节码文件对象,类名.class

 

 

同步的弊端:死锁

死锁出现,同步中出现同步

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                                                                                     

Java多线程完整版基础知识

Java多线程完整版基础知识 (翟开顺由厚到薄系列) 1.前言 线程是现代操作系统中一个很重要的概念,多线程功能很强大,java语言对线程提供了很好的支持,我们可以使用java提供的thread类很容...
  • T1DMzks
  • T1DMzks
  • 2016年07月13日 00:39
  • 8409

java基础(三):多线程

概述 创建线程 同步 线程间通讯 创建线程的三种方式
  • a695422768
  • a695422768
  • 2017年08月04日 15:44
  • 330

【多线程】Java高并发基础

一、摩尔定律的失效和多线程的发展 摩尔定律的思想是,预计18个月会将芯片的性能提高一倍。但是在2004年,Intel CEO宣布Intel彻底取消4G Hz计划,至此摩尔定律在芯片上的发展已经失效了...
  • huanjileaimeidan
  • huanjileaimeidan
  • 2017年06月19日 11:51
  • 580

java多线程并发基础

一、进程:(QQ) 1、程序(任务)的执行过程 2、持有资源(共享内存,共享文件)和线程 二、线程:(文字聊天、收发文件) 三、线程之间的交互: 1、同步:协同完成某个进程 ...
  • zhuyu714997369
  • zhuyu714997369
  • 2016年07月06日 14:38
  • 1990

Java基础总结(二)----集合、多线程、io、虚拟机等

Java集合java集合框架的结构List接口List接口通常表示一个列表(数组、队列、链表、栈等),其中的元素可以重复,常用实现类为ArrayList和LinkedList,另外还有不常用的Vect...
  • wgyscsf
  • wgyscsf
  • 2017年04月04日 22:32
  • 1919

java-多线程-一道阿里面试题分析

传说这是阿里的一道面试题: 也传说发这道题出来的作者去了tmail。下面是关于题目的描述:      这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正?可见博...
  • liguogangde
  • liguogangde
  • 2013年06月15日 22:44
  • 2445

Java笔记 - 线程基础知识

进程是一个执行中程序的实例,是操作系统进行资源分配和调度的一个独立单元。线程是进程中一个单一的程序控制流,是 CPU 调度和分派的基本单元。进程在执行时拥有独立的内存空间,进程中的线程可以共享进程的内...
  • yanshazi
  • yanshazi
  • 2016年04月05日 13:01
  • 2342

线程基础:线程(2)——JAVA中的基本线程操作(上)

从这篇文章开始。我们介绍线程的工作原理。
  • yinwenjie
  • yinwenjie
  • 2016年01月05日 17:35
  • 6527

java--多线程练习题

多线程 一、判断题(T为正确,F为错误),每题1分 1.如果线程死亡,它便不能运行。(T) 2.在Java中,高优先级的可运行线程会抢占低优先级线程。(T ) 3.线程可以用yield方法使低...
  • hl6621
  • hl6621
  • 2017年12月08日 15:18
  • 105

java基础复习(集合、泛型、IO流、多线程、Junit 、内省 、Properties、 路径问题)

集合---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快, 增删慢 ...
  • guanhang89
  • guanhang89
  • 2016年04月25日 11:29
  • 4319
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java基础多线程
举报原因:
原因补充:

(最多只允许输入30个字)