关闭

多线程

111人阅读 评论(0) 收藏 举报
分类:

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

线程: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
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

多线程为什么比单线程快呢?

多线程为什么比单线程快呢?
  • BigJacky
  • BigJacky
  • 2016-06-05 12:30
  • 3637

什么是多线程 菜鸟入门

网上很多资料对多线程都有详细的描述与理解,本菜鸟刚刚入门JAVA对多线程方面不是很熟悉,在看过很多视屏,以及相关博客,书籍通过自己的语言来描述对JAVA多线程的理解,给一些和我一样的菜鸟一起交流,写的...
  • x329357842
  • x329357842
  • 2015-12-23 16:29
  • 5692

《Java多线程编程核心技术》推荐

写这篇博客主要是给猿友们推荐一本书《Java多线程编程核心技术》。之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象。只要你有一点点Java基础,你...
  • u013142781
  • u013142781
  • 2016-03-04 21:35
  • 19141

VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)

VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)
  • vip_member888
  • vip_member888
  • 2017-06-16 13:27
  • 419

异步与多线程的区别

一、异步和多线程有什么区别? 其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿...
  • zhenghongju
  • zhenghongju
  • 2014-05-05 09:46
  • 4473

谈谈我对多线程的理解

一、提到多线程,就不得不理解以下几点: 1.程序,进程,线程这三者之间的关系? 简单来说,一程序可以调用多个进程,比如一个视频播放器程序,里面就存在两个进程:一个是播放视频的进程,一个是下载上传视频...
  • DongMeng1994
  • DongMeng1994
  • 2017-01-17 20:17
  • 3410

多线程是否真的有必要?

相比大家在投简历、面试等等过程中,或多或少会遇到这么一个问题:熟悉掌握多线程开发;谈谈你对多线程的认识。        其实,我有这么一个疑问,那就是多线程真的有必要么?根据我这两年来的项目经验,也...
  • winking324
  • winking324
  • 2014-06-14 00:09
  • 1396

[006]一步一步学懂spring - spring对多线程支持

我们在使用多线程的时候,往往需要创建Thread类,或者实现Runnable接口,如果要使用到线程池,我们还需要来创建Executors,在使用spring中,已经给我们做了很好的支持。只要要@Ena...
  • king_kgh
  • king_kgh
  • 2017-07-24 16:17
  • 1108

多线程的文件读写操作讨论

背景: 对于13GB大小的文件,逐行读取,后写到一个新文件。单个线程,进行耗时242s。这里的处理操作比较简单,仅仅是直接写到一个新的文件。如果处理操作耗时越长,多线程的优点越能够显现出来。 采用多线...
  • ljp1919
  • ljp1919
  • 2016-01-08 11:30
  • 4395

多线程与异步的区别

多线程与异步的区别       随着拥有多个硬线程CPU(超线程、双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论。本文主要是想与园中各位高手一同探讨一下如何使用并...
  • qq_24541459
  • qq_24541459
  • 2016-06-18 10:28
  • 2604
    个人资料
    • 访问:3579次
    • 积分:257
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类