java学习之多线程

1.java中Thread类代表一个线程,两种创建线程的方法:
1)创建Thread的子类,重写run方法;需要调用线程的start()方法启动线程;
2)创建Runnable接口的实现类,实现接口中的run方法;

一般推荐使用第二种方法实现多线程,原因是,首先能够实现多线程资源的共享;另外实现多线程的子类可以继承其他父类
2.String threadName= Thread.currentThread().getName():获取当前执行线程的名字;

3.实现Runnable接口的方式:
3.1:首先创建实现runnable接口的实现类:必须实现run方法
3.2 创建3.1对应的 Runnable接口的实现类对象;
3.3:创建Thread对象,利用Thread(Runnable target)构造器创建
3.4 调用Thread类start()方法启动线程

4.线程生命周期相关的几个方法:
4.1 yield()方法,若当前线程调用该方法,线程由执行状态变为可运行状态

4.2sleep(int min)休眠,使当前线程休眠一段时间()以毫秒为单位
4.3 join()方法,在一个线程中调用另外的线程方法,将使当前线程阻塞,等待另一个线程执行完后,再进入可执行状态

4.4 interrupt()方法,将解除线程的阻塞状态

已经结束的线程再次调用start方法,会抛出异常

4.6 isAlive()方法判断线程是否活着(可运行状态或运行状态)

5.线程安全的问题:
5.1理解并编写出线程不安全的实例代码:多个线程访问一个共享的资源
5.2使用synchronized 代码块解决线程安全的问题:需要在synchronized代码块中
参照共同的一个对象

6.关于线程间的通信:
6.1:相关方法:wait(),notify(),notifyAll()
6.2这些方法在同步方法中调用(synchronized)
//如何使用两个线程交叉打印a到c,要实现交替效果??

时间: 2024-09-29 02:12:30

java学习之多线程的相关文章

JAVA学习笔记 -- 多线程之共享资源

在多线程程序运行过程中,可能会涉及到两个或者多个线程试图同时访问同一个资源.为了防止这种情况的发生,必须在线程使用共享资源时给资源"上锁",以阻挡其它线程的访问.而这种机制也常常被称为互斥量,本文主要介绍它的两种方式synchronized和Lock . 1.synchronized 当任务要执行被synchronized关键字保护的代码片段的时候,它会检查锁是否可用,然后获取锁,执行代码,释放锁.synchronized也有两种用法: A.synchronized方法 import

Java学习笔记—多线程(java.util.concurrent并发包概括,转载)

一.描述线程的类:Runable和Thread都属于java.lang包 二.内置锁synchronized属于jvm关键字,内置条件队列操作接口Object.wait()/notify()/notifyAll()属于java.lang包 二.提供内存可见性和防止指令重排的volatile属于jvm关键字 四.而java.util.concurrent包(J.U.C)中包含的是java并发编程中有用的一些工具类,包括几个部分: 1.locks部分:包含在java.util.concurrent.

java学习笔记 多线程

进程是程序的一次动态执行过程,需要经历代码加载,代码执行,执行完毕的一个完整过程. 多进程操作系统能同时运行多个进程(程序),由于cpu具有备份时机制,所以每个进程都能循环获得自己的cpu时间片.由于cpu执行速度非常快,使得所有程序好像是在"同时运行"一样. 线程是比进程更小的单位,线程是在进程基础上进一步的划分.多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的程序单元称之为线程.(java在运行中至少会启动两个线程:1,main线程 2,垃圾回收线程) 线程的实

Java学习之多线程(sleep()和wait()的相同与不同点) <好程序员特训营>

<A href="http://www.goodprogrammer.org/" target="blank">android培训</a>------我的java笔记,期待与您交流! sleep()和wait()的相同点: (1) 都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回 (2) 都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException. sleep()和

Java学习笔记---多线程同步的五种方法

一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常.举个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块.假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么结果呢?取钱不成功,账户余额是100.取钱成功了,账户余额是0.那到底是哪个呢?很难说清楚.因此多线程同步就

Java学习笔记—多线程(并发工具类,java.util.concurrent.atomic包)

在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段.本章会配合一些应用场景来介绍如何使用这些工具类. CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作.假如有这样一个需求:我们需要解析一个Excel里多个sheet的数据,此时可以考虑使用多线程,每个线程解析一个sheet里的数据,

Java学习笔记—多线程(同步容器和并发容器)

简述同步容器与并发容器 在Java并发编程中,经常听到同步容器.并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector.Hashtable以及SynchronizedList等容器,如果有多个线程调用同步容器的方法,它们将会串行执行. 可以通过查看Vector.Hashtable等同步容器的实现代码,可以看到这些容器实现线程安全的方式就是将它们的状态封装起来,并在需要同步的方法上加上关键字synchronized,但在某

JAVA学习总结-多线程基础:

参考书籍:疯狂JAVA讲义 1.进程和线程; 进程是处于运行过程中的程序;并且具有一定的独立功能;进程是系统进行系统资源分配和调度的一个独立单位. 一般而言,进程包括以下三个特征: 独立性:进程是系统中存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间.在没有经过进程本身允许的情况下,一个用户进程不可以访问其他进程的地址空间. 动态性:进程与程序的区别在于,程序是一个静态的指令集合,而进程是一个正在系统中活动的指令集合.在进程中加入了时间的概念,进程具有自己的生命周期和不同

Java学习之多线程二

1.wait和sleep的区别 sleep: 不释放锁对象, 释放CPU使用权 在休眠的时间内,不能唤醒 wait: 释放锁对象, 释放CPU使用权 在等待的时间内,能唤醒 2.线程的生命周期(五中状态的切换流程)  新建(new Thread) 当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动). 例如:Thread  t1=new Thread();  就绪(runnable) 线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CP