您的位置:首页 > 职场人生

黑马程序员-------------多线程中的(线程、线程组、线程池、以及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,然后再赋值,最后返回引用;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐