夜光带你走进 Java 成神之路(三十九)擅长的领域

夜光序言:

 

曾经为了一个人倾心过,后来才发现那样不值得;有时候,不得不心狠一点,这样自己才会快乐一点;不需要给自己找很多的麻烦,也许对方并不需要你的关心。

 

正文:

                           以道御术 / 以术识道

package 夜光第二部分.案例3;

import java.util.Arrays;
import java.util.List;

//lambda表达式  语法
public class Demo8 {

    public static void main(String[] args) {
        //我们写一个主函数来调用一下
        //下面就构建了一个长度为4的,元素有其中四个的集合
        List<Integer> values = Arrays.asList(10,20,30,40);

        //接下来,我们调用下
        int res = new Demo8().add(values);
        System.out.println("夜光:计算的结果为" + res);

    }

    public int add(List<Integer> values){
        //迭代出来的元素a 等于 a
        //再通过一个sum方法即可
        return values.parallelStream().mapToInt(a -> a).sum();   //并发的
    }


}

代码更加优化了嗯

package 夜光第二部分.案例3;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

//lambda表达式  语法
public class Demo9 {

    public static void main(String[] args) {
        //我们写一个主函数来调用一下
        //下面就构建了一个长度为4的,元素有其中四个的集合
        List<Integer> values = Arrays.asList(10,20,30,40);

        //接下来,我们调用下
        int res = new Demo9().add(values);
        System.out.println("夜光:计算的结果为" + res);

 //     List<Object> l = new ArrayList<>();

//        for (Integer i : values){ //很强大,可以把类型给猜出来
//
//        }

    }

    public int add(List<Integer> values){
        //迭代出来的元素a 等于 a
        //再通过一个sum方法即可
//        return values.parallelStream().mapToInt(a -> a).sum();   //并发的
        values.parallelStream().forEachOrdered(System.out :: println);  //println方法
        return values.parallelStream().mapToInt(i -> i*2).sum();
    }


}

-DarchetypeCatalog=internal


可以用常量

package Java字节码角度看线程安全问题;

//夜光
public class Sequence {

    private int value;

    public int getNext(){
        return value++;
    }

    public static void main(String[] args) {
        //我们调用的时候
//        new Sequence().getNext();
        Sequence s = new Sequence();
        while(true){ //多次调用
            System.out.println(s.getNext());
        }
    }

}

package Java字节码角度看线程安全问题;

//夜光
public class Sequence {

    private int value;

    public int getNext(){
        return value++;
    }

    public static void main(String[] args) {
        //我们调用的时候
//        new Sequence().getNext();

        //1. 下面这种方式面对多线程,会出现不可预期的问题
//        Sequence s = new Sequence();
//        while(true){ //多次调用
//            System.out.println(s.getNext());
//        }

        //2. 我们看看下面这种方式
        Sequence s = new Sequence();
        new Thread(new Runnable() {
            @Override
            public void run() {
                //下面,我们不停地去调用生成器
                while (true){
                    System.out.println(Thread.currentThread().getName()
                    +""+s.getNext());
                    try {
                        Thread.sleep(1000);  //休息一会儿
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        //然后,我们重写多个
        //嗯唔
        //第二个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                //下面,我们不停地去调用生成器
                while (true){
                    System.out.println(Thread.currentThread().getName()
                            +""+s.getNext());
                    try {
                        Thread.sleep(1000);  //休息一会儿
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();


        //第三个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                //下面,我们不停地去调用生成器
                while (true){
                    System.out.println(Thread.currentThread().getName()
                            +""+s.getNext());
                    try {
                        Thread.sleep(1000);  //休息一会儿
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();



    }

}

上面这种方式会出现线程安全问题


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//夜光

@WebServlet(name = "Hello")
public class Hello extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应内容类型
        response.setContentType("text/html");

        //设置逻辑实现
        PrintWriter out = response.getWriter();
        out.println("<h1>Servlet后台</h1>");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>Hello</servlet-name>
        <servlet-class>Hello</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Hello</servlet-name>
        <url-pattern>/Hello</url-pattern>
    </servlet-mapping>

</web-app>
发布了1477 篇原创文章 · 获赞 281 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/103628142
今日推荐