黑马程序员-------------多线程中的(线程、线程组、线程池、以及Java的设计模式)概念及方法的总结
2015-05-11 20:43
561 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
多线程
一.线程的实现方式一:
1.自定义类,继承Thread
2.重写run()方法;
3.测试:
1.实例化自定义类对象;
2.调用start();
class MyThread extends Thread{
public void run(){
//代码
}
}
测试:
main(){
MyThread t = new MyThread();
t.start;
}
二.线程实现的方式二:
1.自定义类,实现Runnable接口;
2.实现run()方法;
3.测试:
1.实例化自定义类;
2.实例化Thread,传递自定义类对象;
3.调用Thread的start()方法;
class MyRunnable implements Runnable{
public void run(){
//代码
}
}
测试:
main(){
MyRunnable myRun = new MyRunnable();
Thread t = new Thread(myRun);
t.start();
}
三.并行和并发:
1.并行:是指多个线程在"同一时间段内"同时在运行;
2.并发:是指多个线程在"同一时间点"时访问共享数据;
四.设置线程名称:
1.在继承Thread时:setName()和getName()就可以;
2.在实现Runnable接口时:Thread.currentThread().getName()
五.线程的优先级:
1.Java中线程的优先级范围:1 -- 10(从低到高)
2.设置:setPriority(int p):
获取:getPriority():
注意:线程的优先级由"操作系统"调度,我们如果想让某个线程优先完成,不能依赖
线程优先级。
如果操作数据很少时,设置优先级的效果也不明显;
六.线程休眠:
public static void sleep(long millis):
加入:
public final void join()
礼让:
public static void yield():退回到就绪状态,由操作系统再次分配。可能会再次分配到执行时间。
后台(守护)线程:
public final void setDaemon(boolean on):如果on为true,将为守护线程;
守护线程:当主进程结束时,守护线程也将结束。但不会立即结束,有个缓冲;
非守护线程(默认):当主进程结束时,将等待线程执行完毕,主进程才会结束;
线程中断:
stop():过时了。
interrupt:当线程内使用Object--wait()或Thread--join()或Thread--sleep()方法阻塞时,
在此线程对象上调用interrupt将会使阻塞抛出异常。在异常处理中,我们可以结束线程;
七.线程的声明周期:
新建--> 就绪--> 运行--> 消亡
实例化对象 调用start() 系统分配 run()执行完毕
|--阻塞
八.同步代码:
1.当多个线程同时访问一个共享资源时,有可能发生"并发访问的问题";
2.可以在可能被多个线程访问的代码块加锁:使用关键字:synchronized
3.可以在方法声明时使用synchronized。表示:同步的方法;
4.可以对静态方法使用synchronized;
5.在静态方法内可以声明同步代码块,锁的是Class对象;
九.JDK5之后的Lock锁:
Lock lock = .....;//子类对象
lock.lock();//获取锁
try{
//同步的代码
}finally{
lock.unlock();//解锁
}
十.线程组:
ThreadGroup:
构造:ThreadGroup(String name);
将线程添加到某个线程组:
MyThread t = new MyThread(group,"线程名称");
作用:可以将多个线程添加到某个组,统一管理;
可以对组内的所有线程做统一操作;
十一.线程池:
Executors类中的一些静态方法:
public static ExecutorService newCachedThreadPool()
public static ExecutorService newFixedThreadPool(int nThreads):例子中使用的;
public static ExecutorService newSingleThreadExecutor():
ExecutorService类:
Future submit():执行一个线程,并接受返回值;
意义:
可以实例化一组线程对象,并可以反复使用,不需要再次构造;
十二.多线程实现方式3:
1.实现Callable接口;
2.重写call()方法;
3.测试:
使用线程池的方式启动线程;
十三.定时器:
1.TimerTask(抽象类):定义任务;
1).继承自TimerTask;
2).重写run()方法;
2.使用Timer启动:
构造方法:Timer();
成员方法:
public void schedule(TimerTask task,long delay):在delay毫秒后开始执行TimerTask
public void schedule(TimerTask task,long delay,long period):安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
其它重载方法看帮助文档;
十四.设计模式:
1.简单工厂模式:
1.提供"具体产品"类;
2.提供"工厂"类:
1).方式一:内部针对每种产品,提供一个单独的getXxx()方法;
2).方式二:内部只提供一个方法,需要所有产品有一个父类,此方法声明:
public 产品父类 get产品(String type){
if(type.equals("")){
return 产品1;
}
if(type.equals("")){
return 产品2;
}
}
2.工厂方法模式:
1).提供"产品"接口
2).提供"工厂"接口;
3).每新增一个产品时,定义一个产品类,实现"产品"接口,
再定义一个"产品工厂"类,实现"工厂"接口;
十五.单例模式:
1.程序运行期间,全局只有一个某类的对象,此类就可以设计为"单例模式":
2.要点:
1).构造方法私有化;
2).定义本类类型的私有、静态 变量;
3).提供公有静态方法获取本类的对象;
3.饿汉式:
内部成员定义时,就直接实例化;
懒汉式:
内部成员定义时,先置为null,在公有方法中,先判断是否是null,然后再赋值,最后返回引用;
多线程
一.线程的实现方式一:
1.自定义类,继承Thread
2.重写run()方法;
3.测试:
1.实例化自定义类对象;
2.调用start();
class MyThread extends Thread{
public void run(){
//代码
}
}
测试:
main(){
MyThread t = new MyThread();
t.start;
}
二.线程实现的方式二:
1.自定义类,实现Runnable接口;
2.实现run()方法;
3.测试:
1.实例化自定义类;
2.实例化Thread,传递自定义类对象;
3.调用Thread的start()方法;
class MyRunnable implements Runnable{
public void run(){
//代码
}
}
测试:
main(){
MyRunnable myRun = new MyRunnable();
Thread t = new Thread(myRun);
t.start();
}
三.并行和并发:
1.并行:是指多个线程在"同一时间段内"同时在运行;
2.并发:是指多个线程在"同一时间点"时访问共享数据;
四.设置线程名称:
1.在继承Thread时:setName()和getName()就可以;
2.在实现Runnable接口时:Thread.currentThread().getName()
五.线程的优先级:
1.Java中线程的优先级范围:1 -- 10(从低到高)
2.设置:setPriority(int p):
获取:getPriority():
注意:线程的优先级由"操作系统"调度,我们如果想让某个线程优先完成,不能依赖
线程优先级。
如果操作数据很少时,设置优先级的效果也不明显;
六.线程休眠:
public static void sleep(long millis):
加入:
public final void join()
礼让:
public static void yield():退回到就绪状态,由操作系统再次分配。可能会再次分配到执行时间。
后台(守护)线程:
public final void setDaemon(boolean on):如果on为true,将为守护线程;
守护线程:当主进程结束时,守护线程也将结束。但不会立即结束,有个缓冲;
非守护线程(默认):当主进程结束时,将等待线程执行完毕,主进程才会结束;
线程中断:
stop():过时了。
interrupt:当线程内使用Object--wait()或Thread--join()或Thread--sleep()方法阻塞时,
在此线程对象上调用interrupt将会使阻塞抛出异常。在异常处理中,我们可以结束线程;
七.线程的声明周期:
新建--> 就绪--> 运行--> 消亡
实例化对象 调用start() 系统分配 run()执行完毕
|--阻塞
八.同步代码:
1.当多个线程同时访问一个共享资源时,有可能发生"并发访问的问题";
2.可以在可能被多个线程访问的代码块加锁:使用关键字:synchronized
3.可以在方法声明时使用synchronized。表示:同步的方法;
4.可以对静态方法使用synchronized;
5.在静态方法内可以声明同步代码块,锁的是Class对象;
九.JDK5之后的Lock锁:
Lock lock = .....;//子类对象
lock.lock();//获取锁
try{
//同步的代码
}finally{
lock.unlock();//解锁
}
十.线程组:
ThreadGroup:
构造:ThreadGroup(String name);
将线程添加到某个线程组:
MyThread t = new MyThread(group,"线程名称");
作用:可以将多个线程添加到某个组,统一管理;
可以对组内的所有线程做统一操作;
十一.线程池:
Executors类中的一些静态方法:
public static ExecutorService newCachedThreadPool()
public static ExecutorService newFixedThreadPool(int nThreads):例子中使用的;
public static ExecutorService newSingleThreadExecutor():
ExecutorService类:
Future submit():执行一个线程,并接受返回值;
意义:
可以实例化一组线程对象,并可以反复使用,不需要再次构造;
十二.多线程实现方式3:
1.实现Callable接口;
2.重写call()方法;
3.测试:
使用线程池的方式启动线程;
十三.定时器:
1.TimerTask(抽象类):定义任务;
1).继承自TimerTask;
2).重写run()方法;
2.使用Timer启动:
构造方法:Timer();
成员方法:
public void schedule(TimerTask task,long delay):在delay毫秒后开始执行TimerTask
public void schedule(TimerTask task,long delay,long period):安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
其它重载方法看帮助文档;
十四.设计模式:
1.简单工厂模式:
1.提供"具体产品"类;
2.提供"工厂"类:
1).方式一:内部针对每种产品,提供一个单独的getXxx()方法;
2).方式二:内部只提供一个方法,需要所有产品有一个父类,此方法声明:
public 产品父类 get产品(String type){
if(type.equals("")){
return 产品1;
}
if(type.equals("")){
return 产品2;
}
}
2.工厂方法模式:
1).提供"产品"接口
2).提供"工厂"接口;
3).每新增一个产品时,定义一个产品类,实现"产品"接口,
再定义一个"产品工厂"类,实现"工厂"接口;
十五.单例模式:
1.程序运行期间,全局只有一个某类的对象,此类就可以设计为"单例模式":
2.要点:
1).构造方法私有化;
2).定义本类类型的私有、静态 变量;
3).提供公有静态方法获取本类的对象;
3.饿汉式:
内部成员定义时,就直接实例化;
懒汉式:
内部成员定义时,先置为null,在公有方法中,先判断是否是null,然后再赋值,最后返回引用;
相关文章推荐
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- 黑马程序员:Java基础总结----模版方法设计模式
- 【搞懂Java多线程之一】多线程相关概念,线程生命周期以及线程创建方法
- Java基础 - 单例(饿汉、懒汉),Runtime类,Timer,线程通信,互斥锁,线程组,线程五种状态,线程池,工厂模式,GUI,适配器设计模式
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- Java设计模式之工厂方法、抽象工厂模式 程序 总结
- 设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题
- java 多线程总结(一) 创建线程的几种方法及对终止线程运行的讨论
- Java线程和多线程(二)——对象中的wait,notify以及notifyAll方法
- Java线程和多线程(二)——对象中的wait,notify以及notifyAll方法
- 黑马程序员-Java基础:设计模式总结
- 黑马程序员_多线程中的Lock锁,死锁以及单例设计模式分析
- 黑马程序员 java 设计模式之 工厂方法
- 【黑马程序员】多线程,设计模式——Java复习笔记
- Java多线程总结(2) — 线程生命周期中常用方法
- JAVA多线程编程设计模式:总结
- java线程常用方法及概念总结
- (48)Java学习笔记——多线程 / 线程间通信 / 线程组 / 线程池 /
- Java线程运行周期方法和多线程模式概述