多线程
1.多线程的实现方法
多线程的实现要依靠Thead类,实现一个线程用到了lamba表达式的应用,具体实现可以参考以下代码
Thead t1=new Thead(()->{
//代码块
});//实现t1线程
Thead t2=new Thead(()->{
//代码块
}); //实现t2线程
t1.start();
t2.start();
//开始运行t1,t2线程;
t1.join();
t2.join();
//等待t1,t2线程结束。
实现多线程时要抛出InterruptException ,不然会提示异常。
2.线程安全
在这儿先讲一下比较简单实现线程安全的方式,当两个线程读取的内存的数据有重叠时,我们避免在某个线程中已经修改了数据后,防止其他线程使用时读取错误导致运行结果错误,我们可以利用加锁:关键字为
synchronized,sycchronized()需要传参,但需要我们注意的是传参的时候,参数必须是以下几种类型
1.一个类
2.一个方法
3.一个静态方法
4.一段代码块
以下为传一个类对象的用法
import java.util.concurrent.atomic.AtomicInteger;
public class Demo11 {
public static void main(String[] args) throws InterruptedException {
Counter counter=new Counter();
Thread thread1=new Thread(()->{
synchronized (counter){
for (int i = 0; i <10000 ; i++) {
counter.increase();;
}
}
});
Thread thread2=new Thread(()->{
synchronized (counter){
for (int i = 0; i <10000 ; i++) {
counter.increase();
}
}
});//锁同一个对象使线程安全
thread1.start();;
thread2.start();;
//开始运行两个线程
thread1.join();
thread2.join();
//等待线程运行结束
System.out.println("count累加后的结果为"+counter.count);
}
}
class Counter{
int count=0;
public void increase(){
count++;
}
}
当我们不用synchronized时这两个线程会一起执行,因为修改的是同一个对象,所以当运行时结果就会出错,因为同时读取内存相同的数据就会导致线程不安全,当加上synchronized时,结果就是20000也是正确的运算结果。
文章评论