java多线程处理代码 java多线程示例代码

java多线程编程代码如下,输出结果如下:首先java多线程处理代码,你同步java多线程处理代码的是具体的某个Test实例 , 对于那个实例来说,实际上只有一个线程访问java多线程处理代码了那个代码块,但是sum和other却是多个线程同时去进行访问,实际上这是不安全的 , 如果你想实现每次都输出10000的效果,那么正确的应该是在Test.class上加锁,而不是获取Test实例的锁,修改后的代码如下:
public class Test extends Thread {
public static int sum = 10000;
public static int other = 0;
public void getMoney() {
synchronized (Test.class) {
System.out.println(Thread.currentThread().getName()" 开始执行");
sum = sum - 100;
System.out.println("sum-100");
other = other100;
System.out.println("other 100");
System.out.println(sumother);
System.out.println(Thread.currentThread().getName()" 执行完成");
}
}
public void run() {
getMoney();
}
public static void main(String[] agrs) {
Thread t[] = new Thread[10];
for (int i = 0; i = 9; i) {
t[i] = new Test();
t[i].start();
}
}
}
// 上面代码能得到你的结果
Java多线程方案如何处理关键代码publicT voidParallelRecursive(final Executorexec,ListNodeTnodes,CollectionT results){
for(NodeT n:nodes){
exec.execute(new Runnable(){
public void run(){
results.add(n.compute());
}
});
parallelRecursive(exec,n.getChildren(),results);
}
}
publicTCollectionTgetParallelResults(ListNodeTnodes)
throws InterruptedException{
ExecutorService exec=Executors.newCachedThreadPool();
QueueT resultQueue=newConcurrentLinkedQueueT();
parallelRecursive(exec,nodes,resultQueue);
exec.shutdown();
exec.awaitTermination(Long.MAX_VALUE,TimeUnit.SECONDS);
return reslutQueue;
}
java多线程共同操作同一个队列,怎么实现?具体代码如下:
以下是两个线程:
import java.util.*;
public class Thread_List_Operation {
//假设有这么一个队列
static List list = new LinkedList();
public static void main(String[] args) {
Thread t;
t = new Thread(new T1());
t.start();
t = new Thread(new T2());
t.start();
}
}
//线程T1,用来给list添加新元素
class T1 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName()"为队列添加了一个元素");
}
@Override
public void run() {
for (int i = 0; i10; i) {
getElemt(new Integer(1));
}
}
}
//线程T2,用来给list添加新元素
class T2 implements Runnable{
void getElemt(Object o){
Thread_List_Operation.list.add(o);
System.out.println(Thread.currentThread().getName()"为队列添加了一个元素");
}
@Override
public void run() {
for (int i = 0; i10; i) {
getElemt(new Integer(1));
}
}
}
//结果(乱序)
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-1为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
Thread-0为队列添加了一个元素
java多线程解决同步问题的几种方式 , 原理和代码在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法 。管道方法不建议使用 。
wait()/notify()方法
await()/signal()方法
BlockingQueue阻塞队列方法
PipedInputStream/PipedOutputStream
阻塞队列的一个简单实现:
public class BlockingQueue {
private List queue = new LinkedList();
private intlimit = 10;
public BlockingQueue(int limit){
this.limit = limit;
}
public synchronized void enqueue(Object item)throws InterruptedException{
while(this.queue.size() == this.limit) {
wait();
}
if(this.queue.size() == 0) {
notifyAll();
}
【java多线程处理代码 java多线程示例代码】this.queue.add(item);
}
public synchronized Object dequeue()throws InterruptedException{
while(this.queue.size() == 0){
wait();
}
if(this.queue.size() == this.limit){
notifyAll();
}
return this.queue.remove(0);
}}
在enqueue和dequeue方法内部,只有队列的大小等于上限(limit)或者下限(0)时,才调用notifyAll方法 。如果队列的大小既不等于上限,也不等于下限,任何线程调用enqueue或者dequeue方法时,都不会阻塞,都能够正常的往队列中添加或者移除元素 。
wait()/notify()方法
生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程 。与此同时,消费者也在缓冲区消耗这些数据 。该问题的关键就是要保证生产者不会在缓冲区满时加入数据 , 消费者也不会在缓冲区中空时消耗数据 。
要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据 。同样,也可以让消费者在缓冲区空时进入休眠 , 等到生产者往缓冲区添加数据之后,再唤醒消费者 。
java多线程处理代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java多线程示例代码、java多线程处理代码的信息别忘了在本站进行查找喔 。

    推荐阅读