您的位置:首页 > 理论基础 > 计算机网络

Java线程及网络编程简介

2017-08-30 22:22 363 查看
线程:(相互独立)
存在多个线程,执行是由CPU决定,当CPU给线程分配时间片时,线程才会执行。
计算机没有严格意义上的同时
程序:计算机硬盘上存放的一段代码,不运行进程:一个程序就是一个进程,一个进程只有当所有线程终止时才会停止线程:一个进程可以包含多个线程,至少包含一个如何实现多线程:
1、自定义线程类,继承Thread,重写run方法
因为是单继承,所以弊端是:只能单继承,功能单一,只能作为线程来使用,和功能的耦合性很高,线程重用性小
2、定义一个类,实现Runnable接口,并实现run方法
《匿名内部类实现》调用start方法,开始线程:让线程进入就绪状态,等待被CPU调用
Thread提供静态方法,获得CPU当前执行的线程 currentThread:
Thread t=Thread.currentThread();通过t.XXX可获得线程相关属性主方法结束,只能代表主线程结束,不代表程序结束;所有的前置线程结束,才标志着线程结束
优先级:最大10,最小1,默认5;增加获得CPU时间片的次数,不是优先级高就先运行,先结束!!!
守护线程:setDaemon(true)也叫后台线程,使用方法和前台线程一样
gc(典型的守护线程)唯一不同,结束时机:当所有前台线程都结束时,后台线程不论是否还要继续,都会强制结束join:等待线程终止,线程1结束后,才会开始线程2 --> 通常用此方法实现协同效果.
一般情况下,若干线程抢着干(抢CPU时间片),join方法实现让他们排队干
static void yield() 暂停当前正在执行的线程对象,让出CPU时间片,并执行其他线程
异步:各干各的,互不干扰同步:共享资源,可能会资源冲突 抢着干(cpu时间片、资源)线程安全API
list=Collections.synchronizedList(list);
可以将所有集合和Map转换成线程安全的
同步锁:synchronized 关键词:
当一个线程在调用被锁的方法的时候,其他线程无法调用这个方法;还可以锁代码块synchronized(this){ 代码块 }锁方法(普通方法):在方法上加关键字
锁静态方法,实际上就是锁住类
锁代码块:通常要指定对象,该对象一般是动态的。所以通常使用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方法,才能重新获得锁的所有权,继续执行,如果不配合锁一起使用,将会抛出异常。
处理多线程的相互协调
(面试题):
一、Sleep与wait区别:
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编程)
EE:B/S(浏览器,网页):不占用内存,不用手动更新,每次更新不需要下载客户端SE:C/S(QQ):占用内存,每次更新需要下载新客户端,可以调取电脑的底层硬件设施(显卡)TCP/IP:数据的传输 HTTP:数据的封装、展示网络层-----IP传输层-----TCP应用层-----HTTPSocket:TCP/IP
步骤:
1、new ServerSocket(int port端口号)
2、new Socket(“IP”,port)
3、accept();
4、通信: PrintWriter BufferedReader
XML:文本标记语言 .xmlHTML:超文本标记语言.xml文件头:<?xml version="1.0" encoding="gbk"?>标签、节点:<name></name> <name/>不能加内容,可以加属性可以自定义,只有根节点是唯一的,其他节点不设限节点可以包含:子节点、属性、文本书写规则不设限,但是可以自定义规则:DTD --> DOCTYPE用途:存放数据,作为配置文件XML的解析 Dom4J读:SAXReader 写:XMLWriter
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 基础