关于线程和多线程的理解
多线程
简单来说,在程序中开辟多条线,同时进行,同时处理,以提高效率。
进程与线程
操作系统中的程序称之为进程。
process 进程
比方说在windows中存在qq和视频播放器(两个进程)
进程是系统开辟的,只是一个动态概念。真正有用的是其中的线程。
thread 线程
在视频播放器中存在这声音,字幕,图像(多个线程)
创建线程的三种方式
-
继承Thread 类 启动方式:子对象.start()
TestThread2 testThread2 = new TestThread2("https://lmg.jj20.com/up/allimg/tp06/201111095104AM-0-lp.jpg", "wenjan"); testThread2.start() -
实现Runnable接口 启动方式:传入目标对象 进入thread对象.start() ;;
TestThread2 testThread2 = new TestThread2("https://lmg.jj20.com/up/allimg/tp06/201111095104AM-0-lp.jpg", "wenjan");
new Thread(testThread2).start()
以接口的方式避免了java语言中继承的局限性,灵活,方便同一个对象被多个线程使用
-
实现Callable接口
Callable可以自定义线程的返回值,可以抛出异常,采用创建线程池的方法进行实现
执行
线程开启不一定立即执行,由cpu调度执行,(同时执行)
多线程同步问题
当存在多个线程同时操作一个资源的情况下,线程是不安全的,数据会出现错误和紊乱
关于代理的理解
public class Marry {
public static void main(String[] args) {
WeddingComponey weddingComponey = new WeddingComponey( new You());
weddingComponey.happyMarr();
}
}
interface Marry2{
void happyMarr();
}
class You implements Marry2{
@Override
public void happyMarr() {
System.out.println("恭喜恭喜");
}
}
class WeddingComponey implements Marry2{
private Marry2 marry2;
public WeddingComponey(Marry2 marry2) {
this.marry2=marry2;
}
@Override
public void happyMarr() {
befor();
this.marry2.happyMarr();
after();
}
private void befor(){
System.out.println("之前布置现场");
}
private void after(){
System.out.println("之后收拾现场");
}
}
代理对象可以做真实对象做不了的事情
真实对象可以做专注做自己的事情
浙公网安备 33010602011771号