当前位置:首页 » 编程语言 » java并发

java并发

发布时间: 2022-02-09 05:07:24

A. java并发集合有哪些

1、常用的并发集合类
ConcurrentHashMap:线程安全的HashMap的实现
CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList
CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素
ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制
LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作都多的情况下,性能优于ArrayBlockingQueue
2、原子类
AtomicInteger:线程安全的Integer,基于CAS(无阻塞,CPU原语),优于使用同步锁的Integer
3、线程池
ThreadPoolExecutor:一个高效的支持并发的线程池,可以很容易的讲一个实现了Runnable接口的任务放入线程池执行,但要用好这个线程池,必须合理配置corePoolSize、最大线程数、任务缓冲队列,以及队列满了+线程池满时的回绝策略,一般而言对于这些参数的配置,需考虑两类需求:高性能和缓冲执行。
Executor:提供了一些方便的创建ThreadPoolExecutor的方法。
FutureTask:可用于异步获取执行结果或取消执行任务的场景,基于CAS,避免锁的使用
4、锁
ReentrantLock:与synchronized效果一致,但是又更加灵活,支持公平/非公平锁、支持可中断的锁、支持非阻塞的tryLock(可超时)、支持锁条件等,需要手工释放锁,基于AbstractQueueSynchronizer
ReentrantReadWriteLock:与ReentrantLock没有关系,采用两把锁,用于读多写少的情形

B. java 并发问题

如果出现线程安全问题的话 用Synchronized修饰使用到这几个变量的方法 或者用Synchronized块把使用这几个变量的语句包进去。

C. java并发问题,如下

可以用锁。 锁就是阻止其它进程或线程进行资源访问的一种方式,即锁住的资源不能被其它请求访问。在JAVA中,sychronized关键字用来对一个对象加锁一般是执行完毕同步代码块(锁住的代码块)后就释放锁,也可以用wait()方式半路上释放锁。wait()方式就好比蹲厕所到一半,突然发现下水道堵住了,不得已必须出来站在一边,好让修下水道师傅(准备执行notify的一个线程)进去疏通马桶,疏通完毕,师傅大喊一声: “已经修好了”(notify),刚才出来的同志听到后就重新排队。

D. java并发框架有哪些

Java并发框架java.util.concurrent是JDK5中引入到标准库中的(采用的是Doug
Lea的并发库)。该包下的类可以分为这么块:

Executors

1)接口:

Executor(例子涉及):用来执行提交的Runnable任务的对象。是一个简单的标准化接口,用来定义包括线程池、异步IO、轻量级任务框架等等。任务可以由一个新创建的线程、一个已有任务执行线程、或是线程直接调用execute()来执行,可以串行也可并行执行,取决于使用的是哪个Executor具体类。

ExecutorService(例子涉及):Executor的子接口,提供了一个更加具体的异步任务执行框架:提供了管理结束的方法,以及能够产生Future以跟踪异步任务进程的方法。一个ExcutorService管理着任务队列和任务调度。

ScheledExecutorService(例子涉及):ExecutorService的子接口,增加了对延迟和定期任务执行的支持。

Callable(例子涉及):一个返回结果或抛出异常的任务,实现类需要实现其中一个没有参数的叫做call的方法。Callabe类似于Runnable,但是Runnable不返回结果且不能抛出checked
exception。ExecutorService提供了安排Callable异步执行的方法。

Future(例子涉及):代表一个异步计算的结果(由于是并发执行,结果可以在一段时间后才计算完成,其名字可能也就是代表这个意思吧),提供了可判断执行是否完成以及取消执行的方法。

2)实现:

ThreadPoolExecutor和ScheledThreadPoolExecutor:可配置线程池(后者具备延迟或定期调度功能)。

Executors(例子涉及):提供Executor、ExecutorService、ScheledExecutorService、ThreadFactory以及Callable的工厂方法及工具方法。

FutureTask:对Future的实现

ExecutorCompletionService(例子涉及):帮助协调若干(成组)异步任务的处理。

Queues

非阻塞队列:ConcurrentLinkedQueue类提供了一个高效可伸缩线程安全非阻塞FIFO队列。

阻塞队列:BlockingQueue接口,有五个实现类:LinkedBlockingQueue(例子涉及)、ArrayBlockingQueue、SynchronousQueue、PriorityBlockingQueue和DelayQueue。他们对应了不同的应用环境:生产者/消费者、消息发送、并发任务、以及相关并发设计。

Timing

TimeUnit类(例子涉及):提供了多种时间粒度(包括纳秒)用以表述和控制基于超时的操作。

Synchronizers 提供特定用途同步语境

Semaphore(例子涉及):计数信号量,这是一种经典的并发工具。

CountDownLatch(例子涉及):简单的倒计数同步工具,可以让一个或多个线程等待直到另外一些线程中的一组操作处理完成。

CyclicBarrier(例子涉及):可重置的多路同步工具,可重复使用(CountDownLatch是不能重复使用的)。

Exchanger:允许两个线程在汇合点交换对象,在一些pipeline设计中非常有用。

Concurrent Collections

除队列外,该包还提供了一些为多线程上下文设计的集合实现:ConcurrentHashMap、CopyOnWriteArrayList及CopyOnWriteArraySet。

注意:"Concurrent"前缀的类有别于"synchronized"前缀的类。“concurrent”集合是线程安全的,不需要由单排斥锁控制的(无锁的)。以ConcurrentHashMap为例,允许任何数量的并发读及可调数量的并发写。“Synchronized”类则一般通过一个单锁来防止对集合的所有访问,开销大且伸缩性差。

E. java高并发是什么意思,高并发的解释

1、在java中,高并发属于一种编程术语,意思就是有很多用户在访问,导致系统数据不正确、糗事数据的现象。并发就是可以使用多个线程或进程,同时处理不同的操作。

F. java 并发执行任务 怎么做

/**
* 定时器
* */
public class TimeThread extends Thread {
public void run() {

Timer time = new Timer();
TimerTask tst = new TimerTask();//定时执行Rptlog类中的run方法
time.schele(tst, 1000,10000);//1秒后执行,每10秒执行一次
}

}

接下来是实际执行的类
public class TimerSendTask extends java.util.TimerTask{

public void run() {
TimerTask tt = new TimerTask();
for(int i=0;i<service.getList().size();i++){//循环查询任务
定时清理任务 实现代码段...
....
}

}
}
再写多个任务的类
在这个地方执行以下就好了
TimerTask tst = new TimerTask();//定时执行Rptlog类中的run方法
time.schele(tst, 1000,10000);//1秒后执行,每10秒执行一次

G. java并发问题求解

T1 T2
1 update table set operator= '客户端A' where id = 1;
2 update table set operator='客户端B' where id = 1;
3 update table set name='更新数据' where operator='客户端A'' and id=1
4 update table set name='更新数据' where operator='客户端B'' and id=1

T*表示事务
1234,表示时间
假如在时间1毫秒将id=1的数据更新为该客户端的名称A。
此时在时间2上,有另外一个客户端更新了id=1的operator客户端B
在时间3上,事务1开始执行更新数据,此时opertor已经被T2更新了B,这时更新语句就不满足了, 这时T1什么也没做。

因为数据库不可能在同一时间,同时更新2条语句的。

H. JAVA如何实现并发

加锁吧,
语法
synchronize(对象){ ...需要并发的代码.... }

I. java中什么是并发,如何解决

多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。 银行两操作员同时操作同一账户就是典型的例子。比如A、B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户减去
50元,A先提交,B后提交。 最后实际账户余额为1000-50=950元,但本该为 1000+100-50=1050。这就是典型的并发问题。
可以用锁解决。
关于锁我也不是太清楚,你可以研究一下.....

J. java并发问题。求详细解释

四个线程访问的是同一个对象apple,所以四个线程访问同一个mount变量,如果没有线程锁的话,当线程A首先执行打印"A拿到了第100个苹果",之后A线程进入睡眠100ms,此时cup将时间片分配给线程B但A线程任然挂起中,所以B线程拿到的mount任然是100,所以"B拿到了第100个苹果",并发产生了(系统执行多线程任务时,cpu会轮流给每个线程分配时间片,时间片耗尽线程被挂起)

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:633
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:362
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:78
php微信接口教程 发布:2025-04-16 17:07:30 浏览:303
android实现阴影 发布:2025-04-16 16:50:08 浏览:789
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:339
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:206
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:806
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:360
土压缩的本质 发布:2025-04-16 16:13:21 浏览:586