美文网首页
Java并行

Java并行

作者: Magicknight | 来源:发表于2017-10-24 11:12 被阅读7次

并行的2个模型

  1. 共享内存
  2. 消息通信

进程和线程的区别

进程拥有私有的内存区域(现代处理器可以使得进程有共享的内存区域),进程代表虚拟计算机;同一个进程中的线程之间是共享内存区域的,线程代表虚拟进程,线程比进程更有效率,进程需要保存大量的数据。在线程数大于CPU内核数数,线程是通过CPU的时间分片控制的执行的。

JAVA运行线程的两种方式

  1. 实现Runnable接口方法(推荐)
public class Crack extends Thread{
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        (new Thread(new Crack())).start();

    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("my name is thread");
    }
}

还有一种匿名的方式来使用Runnable接口

public class Crack {    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        new Thread(new Runnable() {
            public void run() {
                System.out.println("my name is thread");
            }
        }).start();

    }   
}
  1. 声明线程子类的方法(不要使用)
public class Crack extends Thread{
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        (new Crack()).start();

    }
    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("my name is thread");
    }
}


竞争条件导致并行编程是困难的

在并行编程的时候,记得加上锁,也要避免死锁。

  1. 使用synchronized关键字加锁
    下面看一个死锁的例子,alphonse的线程占用了gaston对象,gaston的线程占用了alphonse对象,导致两者都在等对方释放,从而导致死锁。死锁出现的原因:

ava 死锁产生的四个必要条件:

  • 互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用
  • 不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
  • 请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
  • 循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。
public class Deadlock {
    static class Friend {
        private final String name;
        public Friend(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public synchronized void bow(Friend bower) {
            System.out.format("%s: %s"
                + "  has bowed to me!%n", 
                this.name, bower.getName());
            bower.bowBack(this);
        }
        public synchronized void bowBack(Friend bower) {
            System.out.format("%s: %s"
                + " has bowed back to me!%n",
                this.name, bower.getName());
        }
    }

    public static void main(String[] args) {
        final Friend alphonse =
            new Friend("Alphonse");
        final Friend gaston =
            new Friend("Gaston");
        new Thread(new Runnable() {
            public void run() { alphonse.bow(gaston); }
        }).start();
        new Thread(new Runnable() {
            public void run() { gaston.bow(alphonse); }
        }).start();
    }
}

相关文章

  • Java并行

    并行的2个模型 共享内存 消息通信 进程和线程的区别 进程拥有私有的内存区域(现代处理器可以使得进程有共享的内存区...

  • Java 8 并行流(Parallel Stream) 介绍

    这篇博客,我们将介绍Java中的并行流(Parallel Stream)。 Java 8引入了并行流的概念来进行并...

  • Java8 ParallelStream流

    前言 并行编程势不可挡,Java从1.7开始就提供了Fork/Join 支持并行处理。java1.8 进一步加强。...

  • parallelStream遇到的坑

    Java parallelStream遇到的坑 线程安全问题 paralleStream是并行流,并行就意味着是多...

  • java 并行处理

    参考链接 http://blog.dyngr.com/blog/2016/09/15/java-forkjoinp...

  • java 并行 并发

    并发 “并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程...

  • 8-20 JDK8的新特性;

    Stream 接口: Java.util.stream stream的操作可以串行执行或者并行执行 JAVA 8 ...

  • 一. Java并发和多线程简介

    Java并发是一个涉及了java平台上多线程(MultiTheadings)、并发(Concurrency)和并行...

  • Java8使用并行流(ParallelStream)注意事项

    Java8并行流ParallelStream和Stream的区别就是支持并行执行,提高程序运行效率。但是如果使用不...

  • Java并发编程整理之并发与并行概念讲解(1)

    Java并发编程整理之并发与并行概念讲解(1) 并发和并行区别 --[百度]:并发(Concurrent)当有多个...

网友评论

      本文标题:Java并行

      本文链接:https://www.haomeiwen.com/subject/wlxzuxtx.html