有人可以帮我理解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) 我希望正则表达式只验证字母和空格.基本上这是验证全名.例如:史蒂夫柯林斯先生或史蒂夫柯林斯 我试过这个正则表达式."[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 集合可以解决这种情况。
我是 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) 我想补充JFreeChart到JPanel,然后添加JPanel到JTabbedPane.我设法显示JFreeChart上JFrame,但我想添加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) 我在这里可以理解'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) 我已经配置了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) 请帮助我了解如何使用以下方法的方法参考替换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) 我有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) 此代码首先按名字排序哈希值,然后按姓氏排序.如果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) 我想使用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 ×9
java-8 ×2
append ×1
arraylist ×1
chartpanel ×1
charts ×1
collections ×1
comparator ×1
compare ×1
countdown ×1
dictionary ×1
duplicates ×1
inheritance ×1
jfreechart ×1
json ×1
jtabbedpane ×1
lambda ×1
logback ×1
logging ×1
mysql ×1
overriding ×1
python ×1
regex ×1
resultset ×1
scrapy ×1
set ×1
sorting ×1
sql-like ×1
validation ×1
web-scraping ×1