小编ama*_*mal的帖子

CountDownLatch如何在Java多线程中使用?

有人可以帮我理解Java CountDownLatch是什么以及何时使用它?

我对这个程序的工作原理并不十分清楚.据我所知,所有三个线程立即启动,每个线程将在3000ms后调用CountDownLatch.倒数会逐一减少.在锁存器变为零之后,程序打印"已完成".也许我理解的方式不正确.

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class Processor implements Runnable {
    private CountDownLatch latch;

    public Processor(CountDownLatch latch) {
        this.latch = latch;
    }

    public void run() {
        System.out.println("Started.");

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        latch.countDown();
    }
}
Run Code Online (Sandbox Code Playgroud)

// ------------------------------------------------ -----

public class App {

    public static void main(String[] args) {

        CountDownLatch latch = new CountDownLatch(3); // coundown from 3 to 0

        ExecutorService executor = Executors.newFixedThreadPool(3); // 3 Threads in pool

        for(int i=0; i …
Run Code Online (Sandbox Code Playgroud)

java multithreading countdownlatch countdown

178
推荐指数
4
解决办法
11万
查看次数

用于验证全名的Java Regex仅允许空格和字母

我希望正则表达式只验证字母和空格.基本上这是验证全名.例如:史蒂夫柯林斯先生或史蒂夫柯林斯 我试过这个正则表达式."[1 - ZA-Z] + \.?" 但没有工作.有人可以帮助我,请使用Java.

public static boolean validateLetters(String txt) {

    String regx = "[a-zA-Z]+\\.?";
    Pattern pattern = Pattern.compile(regx,Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(txt);
    return matcher.find();

}
Run Code Online (Sandbox Code Playgroud)

java regex validation

32
推荐指数
5
解决办法
13万
查看次数

哪个java集合允许重复键

我正在尝试编写程序来删除单词列表的重复键值对。但是,如果键与不同的值重复,则应允许添加该记录。请帮助我了解哪个 java 集合可以解决这种情况。

  • 键 1 aaaa
  • key2 bbbb
  • key3 cccc
  • key4 dddd
  • key2 bbbb - 重复对 - 不允许
  • key1 hhhh - 重复键 - 允许
  • 关键5 gggg
  • 键 2 nnnn

java collections dictionary set duplicates

8
推荐指数
1
解决办法
3万
查看次数

将 Scrapy Python 输出写入 JSON 文件

我是 Python 和网络抓取的新手。在此程序中,我想将最终输出(所有 3 个链接的产品名称和价格)写入 JSON 文件。请帮忙!

    import scrapy
    from time import sleep
    import csv, os, json
    import random


    class spider1(scrapy.Spider):
        name = "spider1"

        def start_requests(self):
            list = [
                "https://www. example.com/item1",
                "https://www. example.com/item2",
                "https://www. example.com/item3"]

            for i in list:
                yield scrapy.Request(i, callback=self.parse)
                sleep(random.randint(0, 5))

        def parse(self, response):
            product_name = response.css('#pd-h1-cartridge::text')[0].extract()
            product_price = response.css(
                '.product-price .is-current, .product-price_total .is-current, .product-price_total ins, .product-price ins').css(
                '::text')[3].extract()

            name = str(product_name).strip()
            price = str(product_price).replace('\n', "")

data = {name, price}

yield data

extracted_data = []
    while i …
Run Code Online (Sandbox Code Playgroud)

python json append scrapy web-scraping

4
推荐指数
2
解决办法
1万
查看次数

使用JPanel将ChartPanel添加到JTabbedPane

我想补充JFreeChartJPanel,然后添加JPanelJTabbedPane.我设法显示JFreeChartJFrame,但我想添加JFreeChart为一个4片JTabbedPane.

代码显示图表:

public class Chart extends javax.swing.JPanel {

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

        JPanel jPanel1 = new JPanel();
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.setValue(60, "Marks", "Student 1");
        dataset.setValue(40, "Marks", "Student 2");
        dataset.setValue(90, "Marks", "Student 3");
        dataset.setValue(50, "Marks", "Student 4");
        dataset.setValue(70, "Marks", "Student 5");
        dataset.setValue(30, "Marks", "Student 6");

        JFreeChart chart = ChartFactory.createBarChart(
            "Student Marks", "Student Name", "Marks", dataset,
            PlotOrientation.VERTICAL, false, true, false);
        CategoryPlot p = …
Run Code Online (Sandbox Code Playgroud)

java charts jfreechart jtabbedpane chartpanel

3
推荐指数
1
解决办法
6299
查看次数

Java覆盖继承

我在这里可以理解'a1'对于一个以'a = 200'为属性的B类对象.因此,我预计程序将打印200.但为什么这个程序打印100而不是200?

    class A{
        int a=100;
    }

    class B extends A{
        int a=200;

    }

    class Demo{
        public static void main(String args[]){
            A a1=new B(); 
            System.out.println("a : "+a1.a); //Prints 100  
        }
    }
Run Code Online (Sandbox Code Playgroud)

java inheritance overriding

3
推荐指数
1
解决办法
96
查看次数

使用Logger的信息打印类名,方法名和行号()

我已经配置了logback文件来获取类名,方法名和行号.

 <pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %class{36}.%M %L - %msg%n </pattern>
Run Code Online (Sandbox Code Playgroud)

我想在输入和现有方法时打印日志消息.我怎么能使用info()方法在类中做到这一点.我使用下面的代码.但它没有打印出我想要的东西.

我使用org.slf4j.Logger和Logback日志记录

LOG.info("Entering " + );
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

14:41:48.097 [main] INFO  c.a.j.orgchart.CsvPersonReader - Entering 
Run Code Online (Sandbox Code Playgroud)

我想打印这样的东西:

14:41:48.097 [main] INFO  c.a.j.orgchart.CsvPersonReader.[MethodName] [Linenumber] - Entering 
Run Code Online (Sandbox Code Playgroud)

java logging logback

2
推荐指数
1
解决办法
8422
查看次数

用方法引用替换Lambdas.

请帮助我了解如何使用以下方法的方法参考替换lambda.

    public List<Person> sortByStartDate_ASC(LinkedHashSet<Person> personList) {

        List<Person> pList = new ArrayList<Person>(personList);

        Collections.sort(pList, (Person person1, Person person2) -> person1
            .getStartDate().compareTo(person2.getStartDate()));
        return pList;
    }
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 method-reference

2
推荐指数
1
解决办法
817
查看次数

将ArrayList的内容与Resultset进行比较

我有String ArrayList与Resultset进行比较.

例如:ArrayList元素

ITM001
ITM002
ITM003
ITM004
Run Code Online (Sandbox Code Playgroud)

例如:结果集1

ITM001
ITM002
ITM003
ITM004  
Run Code Online (Sandbox Code Playgroud)

包含所有元素
返回ArrayList Empty;

例如:结果集2

ITM001
ITM002
ITM004  
Run Code Online (Sandbox Code Playgroud)

缺少ITM003
返回ArrayList ITM003;

例如:结果集3

ITM001
ITM002 
Run Code Online (Sandbox Code Playgroud)

缺少ITM003,ITM004
返回ArrayList ITM003,ITM004;

如果Resultset不包含Arraylist的所有元素,那些缺少的元素必须作为ArrayList返回.否则返回空ArrayList.

这是我试过的.

public static ArrayList<String> checkStoreItems(String currentStore, ArrayList<String> stlist) throws ClassNotFoundException, SQLException {
        Connection conn = DBConnection.conn();
        String sql = "select itemId from Store_Items where storeID=(select storeID from StoreMain where locationName=?)";
        Object []values ={currentStore}; 
        ResultSet res = DBHandller.getData(sql, conn, values);
        ArrayList<String> storelist = new ArrayList<String>();
        while(res.next()){
              String item = res.getString("itemId");
              for (int …
Run Code Online (Sandbox Code Playgroud)

java compare arraylist resultset

1
推荐指数
1
解决办法
1923
查看次数

Java 8基于第3个值排序

此代码首先按名字排序哈希值,然后按姓氏排序.如果2个人具有相同的名字和姓氏,我想按他们的ID值对他们进行排序.请帮助我了解在这种情况下如何与第三个值进行比较.

public static void multiple_sort(HashSet<Person> personSet) {

    Comparator<Person> byFirstName = (f1, f2) -> f1.getFirstName().compareTo(f2.getFirstName());

    Comparator<Person> byLastName = (f1, f2) -> f1.getLastName().compareTo(f2.getLastName());

    personSet.stream().sorted(byLastName.thenComparing(byFirstName)).forEach(e -> System.out.println(e));

}
Run Code Online (Sandbox Code Playgroud)

sorting comparator java-8

1
推荐指数
1
解决办法
51
查看次数

使用MySQL作为列名

我想使用preparestatement编写一个mysql select查询。但是最后一部分是concat('%', itemName, '%')"; itemName表的列,存在语法错误ItemMain。我已经尝试过以下3个查询。

String sql ="SELECT * FROM ItemMain WHERE ? = 'All' OR ? like concat('%', itemName, '%')";
String sql ="SELECT * FROM ItemMain WHERE ? = 'All' OR ? like  '%'+itemName+'%'";
String sql ="SELECT * FROM ItemMain WHERE ? = 'All' OR ? like  '%itemName%'";
Run Code Online (Sandbox Code Playgroud)

java mysql prepared-statement sql-like

0
推荐指数
1
解决办法
1612
查看次数