线程:(相互独立)

存在多个线程,执行是由CPU决定,当CPU给线程分配时间片时,线程才会执行。

计算机没有严格意义上的同时

程序:计算机硬盘上存放的一段代码,不运行

进程:一个程序就是一个进程,一个进程只有当所有线程终止时才会停止

线程:一个进程可以包含多个线程,至少包含一个

如何实现多线程:

1、自定义线程类,继承Thread,重写run方法

因为是单继承,所以弊端是:只能单继承,功能单一,只能作为线程来使用,和功能的耦合性很高,线程重用性小

2、定义一个类,实现Runnable接口,并实现run方法   

《匿名内部类实现》

调用start方法,开始线程:让线程进入就绪状态,等待被CPU调用

Thread提供静态方法,获得CPU当前执行的线程  currentThread

Thread t=Thread.currentThread();

通过t.XXX获得线程相关属性

主方法结束,只能代表主线程结束,不代表程序结束所有的前置线程结束,才标志着线程结束

优先级:最大10,最小1,默认5;增加获得CPU时间片的次数,不是优先级高就先运行,先结束!!!

守护线程:setDaemontrue也叫后台线程,使用方法和前台线程一样

gc(典型的守护线程)

唯一不同,结束时机:当所有前台线程都结束时,后台线程不论是否还要继续,都会强制结束

join:等待线程终止,线程1结束后,才会开始线程2  --> 通常用此方法实现协同效果.

一般情况下,若干线程抢着干(抢CPU时间片),join方法实现让他们排队干

static void yield()    暂停当前正在执行的线程对象,让出CPU时间片,并执行其他线程

异步:各干各的,互不干扰

同步:共享资源,可能会资源冲突       抢着干(cpu时间片、资源

线程安全API

list=Collections.synchronizedList(list);

可以将所有集合和Map转换成线程安全的

 

同步锁:synchronized   关键词:

当一个线程在调用被锁的方法的时候,其他线程无法调用这个方法;

还可以锁代码块synchronizedthis{  代码块  }

锁方法(普通方法):在方法上加关键字

锁静态方法,实际上就是锁住类

锁代码块:通常要指定对象,该对象一般是动态的。所以通常使用this

被锁住的代码,多线程不能同时访问,为了保证多线程并发效率:

原则是:锁的范围不要过大,尽量缩小(能锁代码,就不要锁方法;能锁方法,就不要锁调用的对象)

Shop shop=new Shop();

synchronized (shop) {     shop对象锁住

shop.room();

}

Sleep方法进入阻塞状态,不会丢失对线程的监控(锁)

Wait  notify   notifyAll

Wait执行条件判断,用while不要用if

因为线程CPU时间片切换的随机性,所以if有可能存在不确定性

调用wait,让obj对象上的线程进入等待状态

直到调用notify方法,才可以继续进入就绪状态

通常wait配合锁一起使用wait本身会释放对锁的所有权,直到其他线程调用notify方法,才能重新获得锁的所有权,继续执行,如果不配合锁一起使用,将会抛出异常。

处理多线程的相互协调

(面试题):

一、Sleepwait区别:

1、方法的位置

2、都是进入阻塞状态,但唤醒方式不一样

3、对锁的控制不一样

二、实现多线程的方式:3

三、什么是同步?什么是异步?

线程池:

1、extends Thread

2、Implements Runnable

3、线程池ExecutorService es=Executors.newFixedThreadPool(2);

线程多了就会:内存CPU压力大,并发效率不高

为了缓解,将线程并入到线程池中,由线程池统一分配资源CPU资源调用执行

通俗:线程做完自己的事,回到了线程池,并且添加了一个标记,标示该线程是空闲的,可以重新分配任务

 


网络编程:

Socket   网络编程        Java.net

服务器Server        客户端Client         C/S编程)

服务器Server        浏览器Browser        B/S编程)

EEB/S(浏览器,网页):不占用内存,不用手动更新,每次更新不需要下载客户端

SEC/SQQ):占用内存,每次更新需要下载新客户端,可以调取电脑的底层硬件设施(显卡)

TCP/IP:数据的传输          HTTP:数据的封装、展示

网络层-----IP

传输层-----TCP

应用层-----HTTP

SocketTCP/IP  

步骤:

1、new ServerSocket(int port端口号)

2、new Socket(IP,port)

3、accept();

4、通信:  PrintWriter          BufferedReader

 

 

XML:文本标记语言  .xml

HTML:超文本标记语言

.xml

文件头:<?xml version="1.0" encoding="gbk"?>

标签、节点:<name></name>   

<name/>不能加内容,可以加属性

可以自定义,

只有根节点是唯一的,其他节点不设限

节点可以包含:子节点、属性、文本

书写规则不设限,但是可以自定义规则:DTD   --> DOCTYPE

用途:存放数据,作为配置文件

XML的解析   Dom4J

读:SAXReader       写:XMLWriter