Java语言程序设计-进阶篇(七)多线程与并行程序设计【上】
2018-03-09 02:11
507 查看
1.简单的多线程例子package test;
public class hello {
public static void main(String args[]){
Runnable printA = new PrintChar('a',100);
Runnable printB = new PrintChar('b',100);
Runnable printC = new PrintChar('c',100);
Thread A = new Thread(printA);
Thread B = new Thread(printB);
Thread C = new Thread(printC);
A.start();
B.start();
C.start();
}
}
class PrintChar implements Runnable{
private char c;
private int i;
public PrintChar(char c, int i) {
this.c = c;
this.i = i;
}
@Override
public void run() {
for(int k=0;k<i;k++)
System.out.print(c);
}
}
其中若将A.start()等改成A.run();最后实现的结果是打印100个A然后打印100个B最后打印100C,没有实现多线程并行操作。
2.创建一个线程池创建一个有三个固定线程的线程池
ExecutorService exe = Executors.newFixedThreadPool(3);
创建一个可变的线程池:
ExecutorService exe = Executors.newCachedThreadPool();
3.线程同步与同步语句package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Account {
private static account acc = new account();
public static void main(String args[]){
ExecutorService exe = Executors.newCachedThreadPool();
for(int i=0;i<10000;i++){
exe.execute(new addmoney());}
exe.shutdown();
while(!exe.isTerminated()){}
System.out.println(acc.getbal());
}
private static class addmoney implements Runnable{
public void run(){
synchronized(acc){
acc.dep(1);}}
}
private static class account{
private int balance = 0;
private int getbal(){
return balance;
}
public void dep(int m){
int newbalance =balance+ m;
try{
Thread.sleep(5);
}
catch(InterruptedException ex){}
balance = newbalance;
}
}
}
其中若将
synchronized(acc)这里acc改成this将不能实现同步。
另外可以在
public void dep(int m)这里加入关键字synchronized实现同步,另外在方法体中使用synchronized(this){method}也可以实现同步。使用lock也可以显示的实现锁,使用Lock lock=new ReentrantLock()创建锁。
4.线程之间协作
使用该语句可以创建线程之间的唤醒条件实现线程之间的协作
相关文章推荐
- Java语言程序设计-进阶篇(九)多线程与并行程序设计【下】
- Java语言程序设计-进阶篇(八)多线程与并行程序设计【实例】
- Java语言程序设计-进阶篇(六)排序算法
- 完数的Java多线程并行程序设计-并行计算
- Java语言程序设计-进阶篇(二)泛型
- Java语言程序设计-进阶篇(十一)客户端/服务器程序实例
- Java语言程序设计-进阶篇(四)集合和映射表
- Java语言程序设计-进阶篇(五)算法基础
- Java语言程序设计基础加进阶原书第10版百度云盘下载链接 [网络收录]
- Java语言程序设计-进阶篇(三)线性表,栈,队列和优先队列
- Java语言程序设计-进阶篇(一)递归
- Java语言程序设计-进阶篇(十二)数据库程序设计
- java语言程序设计-进阶篇(十)网络
- Java语言程序设计基础篇原书第十版第二章编程练习题答案
- Java进阶(三)多线程开发关键技术
- Java语言程序设计 第十六章 (16.22、16.23、16.24、16.25、16.26)
- 专业语言:Java程序设计的基本结构
- Java多线程程序设计详细解析
- Java语言程序设计基础(5)【字符串】
- java 多线程并行求和 之 join() 方法应用