java线程池是同步还是异步的_线程、线程池、并发、同步、异步、锁

先看一个模拟多个线程同时写1000条日志例子:

class Program {

static void Main(string[] args) {

Thread t1 = new Thread(Working);

t1.Name = "Thread1";// 实例化三个写日志的线程。

Thread t2 = new Thread(Working);

t2.Name = "Thread2";

Thread t3 = new Thread(Working);

t3.Name = "Thread3";

// 依次启动3个线程。

t1.Start();

t2.Start();

t3.Start();

Console.ReadKey();

}

// 每个线程都同时在工作

static void Working() {

// 模拟1000次写日志操作

for (int i = 0; i < 1000; i++) {

Logger.Write(Thread.CurrentThread.Name + " writes a log: " + i + ", on " + DateTime.Now.ToString() + ".\n");

}// 做一些其它的事件

for (int i = 0; i < 1000; i++) { }

}

}

并发:

多个用户争夺同一个资源(这个资源可以是服务器上的日志,可以是执行某一此sql操作,可以使ftp服务器上的某个文件等,又或者是程序中的某一个全局变量,因此我们可以称这种资源为:全局资源);

解释:

并发是在多个用户请求同一个资源的时候,或者是程序本身多线程请求同一个资源的时候造成的。

比如:

一个财务系统,两个人同时对总钱数进行操作,一个加10块一个减100块,注意这两个操作是同时进行的,那系统就不知道是加还是减了,这是并发问题。或者,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数据,而B线程又修改了A线程处理的数理(线程安全)。

异步:

A线程要请求某个资源,但是此资源正在被B线程使用中,因为没有同步机制存在,A线程

仍然请求的到这个资源,A线程无需等待。

同步:

A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求

不到,怎么办,A线程只能等待下去。

同步与异步:

显然,同步最安全,最保险的。而异步不安全,容易导致死锁,这样一个线程死掉就会导致整个

进程崩溃,但没有同步机制的存在,性能会有所提升。所以对于同步与异步必须有所取舍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值