进程、线程、多线程的初步学习
来源:互联网 发布:php string indexof 编辑:程序博客网 时间:2024/05/21 22:34
//进程是当一个程序开始运行时,她就是一个进程
//线程是一个程序运行中的一个执行流 例如播放器 运行的时候可以看歌词,就是一个线程
//多线程 迅雷中的下载就是一个例子 下载一个是单线程 同时下载多个就是多线程 提高cpu的里利用率
//多线程同时也有不利的 线程也是程序 需要占用内存,多线程需要协调和管理,所以需要cpu时间跟踪线程
// 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;线程太多会导致控制太复杂,最终可能造成很多Bug;
// 用 Thread 类创建线程时, 只需提供线程入口(线程入口使程序知道该让这个线程干什么事)
//创建线程的语法:
// 2:Thread newThread = new Thread(方法);
// 注意:方法可以是静态的也可以为非静态
//方法可以是本类的也可以为非本类
//思考:如果线程的入口方法带参数怎么办?
//那么参数一定是Object类型
//线程的参数请由对象或类进行承载
static void Main(string[] args)
{
//没有参数类型的
Thread t = new Thread(RunDownload);
t.Start();
//有参数类型的
Thread t1 = new Thread(Run);
List list= new List { 1, 2, 3, 4, 5 };
t1.Start(list);
}
static void RunDownload()
{
Console.WriteLine(“开始下载”);
}
static void Run(object obj)
{
List<int> s = obj as List<int>; foreach (var item in s) { Console.WriteLine(item); } }
//多线程的使用
static void Main(string[] args)
{
Thread t1 = new Thread(RunDownload);
Thread t2 = new Thread(ReadFile);
t1.Start();
t2.Start();
//获取当前运行状态
Console.WriteLine(t1.ThreadState);
}
Console.WriteLine(t2.ThreadState);
}
static void RunDownload()
{
int i = 0;
while (true)
{
Thread.Sleep(50);
//Console.WriteLine(“下载”);
Console.Write(i+++”\t”);
}
}
static void ReadFile()
{
while (true)
{
Thread.Sleep(500);
Console.WriteLine();
}
}
//当多个线程同时运行一个方法时我们需要用一个 lock (this)//互斥锁 或者Monitor来解决死锁现象
static void Main(string[] args)
{
Student s = new Student();
Thread t1 = new Thread(s.Run);
Thread t2 = new Thread(s.Run);
Thread t3 = new Thread(s.Run);
t1.Name = “汽车1”;
t2.Name = “汽车2”;
t3.Name = “汽车3”;
t1.Start();
t2.Start();
t3.Start();
}
class Student
{
public void Run()
{
//解决死锁方式1
lock (this)//互斥锁 ,解决线程同步问题,多个线程操作同一个方法的时候会出现死锁
{
Console.WriteLine(Thread.CurrentThread.Name+”过隧道”);
Thread.Sleep(2000);
}
//
//解决死锁方式2
//Monitor.Enter(this);
//Console.WriteLine(Thread.CurrentThread.Name+”过隧道”);
//Thread.Sleep(2000);
//Monitor.Exit(this);
}
}
}
//如果是静态方法则需要
static Object obj = new object();
static void Student()
{
lock (obj)
{
Console.WriteLine(Thread.CurrentThread.Name+”过隧道”);
Thread.Sleep(2000);
}
}
}
- 进程、线程、多线程的初步学习
- 多线程的初步学习
- 初步学习多线程的总结
- 多线程 学习笔记<4> 进程与线程的区别联系
- JAVA线程的初步学习
- 线程 进程 多线程的使用
- 进程、线程、多线程的引入
- 进程、线程、多进程、多线程的优缺点
- 进程、线程、线程的创建及多线程
- 线程的初步学习(委托的初步使用)
- java学习笔记-线程的初步研究
- JAVA学习线程的初步理解
- 初步了解进程和线程
- 多线程,进程与线程的解释
- 多线程之进程与线程的理解
- 线程,进程以及多线程的开发问题
- 多线程的概念 程序,进程,线程
- 多线程1-线程和进程的实现
- JavaScript中的this(你不知道的JavaScript)
- JAVA面向对象练习04
- 某小公司RESTful、共用接口、前后端分离、接口约定的实践
- 【Leetcode】【python】Word Search
- 第一步,拆分文件
- 进程、线程、多线程的初步学习
- Linux redis 安装配置及密码设置
- 直播 | Kubernetes使用集群联邦实现多集群管理
- bootstrap 淡入淡出banner轮播
- python网络数据采集-单选按钮、复选框和其他输入
- log4net自动删除日志文件【实现】
- 17101701_CentOS7下利用init.d启动脚本实现tomcat开机自启动
- 2017.10.21离线赛总结
- Linux不能上网ping:unknown host问题怎么解决?