多线程的并发处理

一、线程同步方式

1.关键字(synchronized)

  Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码

      a) 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行,另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

       b) 当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞

1     public synchronized void foo( B b )
2     {
3         System.out.println("当前线程名: " + Thread.currentThread().getName()
4             + " 进入了A实例的foo()方法" );     //
5     }

 

2.同步锁(lock)

  Lock是控制多个线程对共享资源进行访问的工具.通常,锁提供了对共享资源的独占访问,每次只能有一个,线程对Lock对象加锁,线程开始访问共享资源之前,应该先获得Lock对象。

 1     //定义锁对象
 2     private final ReentrantLock lock = new ReentrantLock();
 3     //定义需要保证线程安全的方法
 4     public void m(){
 5         lock.lock();
 6         try{
 7             //需要保证线程安全的代码
 8             //...method body
 9         }
10         //使用finally块来保证释放锁
11         finally{
12             lock.unlock();
13         }
14     }

 

 

二、线程安全集合

目前,java支持的线程安全集合类有两类

a)以Concurrent开头的集合类,包括ConcurrentHashMap、ConcurrentSkipListMap、ConcurrentSkipListSet、ConcurrentLinkedQueue、ConcurrentLinkedDeque。

b)以CopyOnWrite开头的集合类,包括CopyOnWriteArrayList、CopyOnWriteArraySet。

另外,ArrayList,LinkedList,HashSet,TreeSet,HashMap,TreeMap等都是线程不安全的.

 

如果程序中有多个线程可能访问以上这些集合,就可以使用Collection提供的类方法把这些结婚包装成线程安全的集合。

HashMap<String,String> m = (HashMap<String, String>) Collections.synchronizedMap(new HashMap<String, String>());

 

转载于:https://www.cnblogs.com/pinenut/p/9073008.html

Java多线程并发处理是指在一个程序中同时执行多个线程的能力。在Java中,可以通过使用Thread类或实现Runnable接口来创建和管理多个线程。 多线程并发处理的好处是可以提高程序的效率和响应速度。通过将任务划分为多个线程,并同时执行这些线程,可以利用计算机的多个处理单元或多核处理器的优势,充分发挥计算资源的能力。 在多线程处理中,需要注意线程之间的安全性和同步性。由于多个线程同时访问共享的资源可能引发竞态条件或死锁等问题,因此需要使用同步机制来保证资源的正确访问。Java提供了synchronized关键字和Lock接口等机制来实现线程的同步。 除了同步机制,Java还提供了线程间通信的方法,如wait()、notify()和notifyAll()等,用于实现线程间的协作和数据传输,避免了线程之间的竞争和冲突。 同时,在多线程并发处理中,还需要注意线程的调度和优先级设置。Java中的线程调度器会根据线程的优先级和调度策略来决定线程的执行顺序,以及如何平衡和分配计算资源。 总而言之,Java多线程并发处理是一种实现并行计算和提高程序性能的重要手段。通过合理的线程设计和管理,可以充分利用计算资源,提高程序的效率,并实现多个任务的同时执行。同时,也需要注意处理线程安全性和同步问题,以及线程的调度和优先级设置,保证多线程的正确和高效运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值