多线程

来源:互联网 发布:node如何指定版本安装 编辑:程序博客网 时间:2024/06/05 19:01

多线程:网络编程(理论)代码),软件服务器,软件工具

线程:Thread,Dos单任务操作系统,多任务操作。基于进程,一个进程就是一个应用程序,各自是独立的内存地址空间,

一个应用程序也可以同时(由CPU在之间完成切换完成的)执行多个任务,线程在进程内部独立执行的运行路径(一个线程就是一个运行工具,线程是共享内存空间

句柄:引用变量

在java运行的时候,java虚拟机就执行了多个线程,如主线程,gc,执行时CPU在多个线程进行切换

关系.

线程:切换成本低

并行运行如catch块中抛出异常与主线程就是并行的

实现多线程

Classmythread extends thead另一个继承runable接口

方法一:继承

方式二:实现runable接口,然后再把实现类对象传递给Thread对象,使用哪个根据场景区分

线程状态:分为5种状态

①   新建:new创建对象

②   就绪:调用start但start还未调用run

③   运行:执行run方法

④   运行中间可能有中断共5个原因:按频繁度:1. 运行中间没有抢到cpu。线程优先级共10级,默认5级,使用setpriority提升优先级,但10级并不是说一定会先执行,只是说抢占cpu的几率大,级别低的也可能抢到

2阻塞:由于I/O事件,线程被阻塞,如Scanner输入,print输出

3休眠:在thread有一个sleep方法,休眠,完成后才参与抢占资源

        4等待唤醒:wait—notify(2个线程访问同一个资源,一个进入先让另一个等待,等做完了再notify唤醒另一个资源第一个资源,notifyall全部唤醒)

        5挂起 yield强制性将线程拉出资源

⑤   死亡:run方法执行结束

 

线程的安全性:StringBuffer和StringBuilder 如arraylist victor

Hashmap hashtable 都是线程同步不同

线程安全性问题:多个线程访问同一资源,会造成数据不统一,当多个线程访问时,就会采用同步,实际上就是对资源加了一把锁,先让一个线程做完,再进行下一个,效率就会变低

同步使用一个关键字:synchronized,第一种:在声明中,加上synchronized表示本方法是一个同步方法

第二种:将普通方法调用时采用同步块。所有方法均为同步方法:synchronized(rs){
rs.display;

}

死锁:当2个线程依赖于一对同步对象时就会发生锁死现象,依赖于wait,notify机制,这两个方法必须写在同步块里面(生产者与消费者问题)

 

 

网络编程:OSI模型,通信协议

OSI模型,开放系统互联模型,7层。实际使用TCP/IP四层模型

应用层,表示层,会话层,传输层,网络层,数据链接层,物理层顺序,在接受从下往上传

四层:应用层(遵守http协议),传输层(TCP:三次握手机制,保证传输的有效。另外一种UDP协议,安全性弱),网络互联层(IP协议,按协议的规定组合在一起寻址),网络接口层。

Socket:套接字实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。Socket编程

产生Socket对象,告诉ip地址:本机在网络上的ip地址,端口号:头有65535个端口,每一个端口针对一个应用,这些都是封装在协议中,交给谁去处理,作为发送方和接收方必须一致。接受同一端口号,在1024之前的端口号不能使用,如80端口浏览器,常见工具端口号不能使用,开发,一端是发消息的,一端是接消息

 

单例模式:书写一个类,该类能且只能产生一个对象

重写构造:结构体为private,外面new不到,加方法,public static getA()

Return属性为new A();

预加载模式:懒汉模式。

非预加载:在public static getA()里面写:

if a=null{
a=new A()

}

Return a;

延迟加载:饿汉模式,优势在于当真正需要a对象时才产生a对象,缺点是效率低。

双锁机制

Private A(){

}

Public static A getA(){

If(a==null){

Synchronized(this){//控制只能产生一个对象,只对第一次产生A对象同步,例外的A就跑掉了。

If(a==null){

A=newA();

}

 

}

 

}

 

 

}

 

0 0