黑马程序员-------------多线程中的(线程、线程组、线程池、以及Java的设计模式)概念及方法的总结

本文总结了Java多线程的实现方式,包括继承Thread类、实现Runnable接口,以及线程的并行并发、设置线程优先级、休眠、同步代码块和锁的概念。还介绍了线程池的使用,通过Executors创建ExecutorService,以及Callable和Future接口的应用。此外,文章涵盖了设计模式中的简单工厂、工厂方法和单例模式,强调了在多线程环境中的重要性。

------- <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,然后再赋值,最后返回引用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值