JAVA进阶14
间歇性混吃等死,持续性踌躇满志系列-------------第14天
1、线程的加入
package code0328; import javax.swing.*;
import java.awt.*; public class JoinTest extends JFrame {
//定义两个线程
private Thread threadA;
private Thread threadB;
//定义两个进度条组件
final JProgressBar progressBar = new JProgressBar();
final JProgressBar progressBar2 = new JProgressBar();
int count = 0; public static void main(String[] args) {
init(new JoinTest(), 400, 400);
} public JoinTest() {
super();
//将进度条设置在窗体最北面
getContentPane().add(progressBar, BorderLayout.NORTH);
//将进度条设置在窗体最南面
getContentPane().add(progressBar2, BorderLayout.SOUTH);
progressBar.setStringPainted(true);
progressBar2.setStringPainted(true);
//使用匿名内部类形式初始化Thread实例
threadA = new Thread(new Runnable() {
int count = 0; //重写run方法
public void run() {
while (true) {
//设置进度条的当前值
progressBar.setValue(++count);
try {
//使A休眠0.1秒
threadA.sleep(100);
//使B调用join()方法
threadB.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
//启动线程A
threadA.start();
threadB = new Thread(new Runnable() {
public void run() {
//设置进度条的当前值
progressBar2.setValue(++count);
try {
//使B休眠0.1秒
threadB.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
//当count变量增长为100时 }
});
threadB.start();
} public static void init(JFrame frame, int width, int height) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setVisible(true);
}
}
运行结果图

2、线程的安全
package code0328;
public class ThreadSafeTest implements Runnable {
//设置当前总票数
int num = 10;
public void run(){
while (true){
synchronized (""){
if (num > 0) {
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("tickets:" + --num);
}
}
}
}
public static void main(String[] args) {
//实例化类对象
ThreadSafeTest t = new ThreadSafeTest();
//以该类对象分别实例化4个线程
Thread TA=new Thread(t);
Thread TB=new Thread(t);
Thread TC=new Thread(t);
Thread TD=new Thread(t);
Thread TE=new Thread(t);
Thread TF=new Thread(t);
//分别启动线程
TA.start();
TB.start();
TC.start();
TD.start();
TE.start();
TF.start();
}
}
运行结果图

3、 线程的插队运行
package code0328;
class EmergencyThread implements Runnable {
public void run() {
for (int i = 0; i < 6; i++) {
try {
//当前线程休眠0.1秒实现动态更新
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//紧急情况下车辆发车
System.out.println("紧急情况:" + i + "号车出发!");
}
}
}
public class JoinThread {
public static void main(String[] args) {
//创建新线程
Thread thread = new Thread(new EmergencyThread());
//运行新线程
thread.start();
for (int i = 0; i < 6; i++) {
try {
//当前线程休眠0.1秒实现动态更新
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//正常情况下车辆出发
System.out.println("正常情况:" + i + "号车出发!");
try{
//使用join()方法让新创建的线程优先完成
thread.join();
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
运行结果图

4、InetAdress类的常用方法

package code0328; import java.net.InetAddress;
import java.net.UnknownHostException; public class Adress {
public static void main(String[] args) {
//声明InetAddress对象
InetAddress ip;
//try预警捕捉可能出现的异常
try {
//实例化对象
ip = InetAddress.getLocalHost();
//获取本地主机名
String Localname = ip.getHostName();
//获取本地主机的IP地址
String localip = ip.getHostAddress();
//输出本地主机名
System.out.println("本地主机名:" + Localname);
//输出本地主机的IP地址
System.out.println("本地ip地址:"+localip);
}catch (UnknownHostException e){
//输出异常
e.printStackTrace();
}
}
}
运行结果图

5、数组工具类Arrays

package cn.intcast.demo14;
import java.util.Arrays;
public class Code01Arrays {
public static void main(String[] args) {
int[] intArray = {1,2,3,4,5};
//将int[]数组按照默认格式变成字符串
String inStr = Arrays.toString(intArray);
System.out.println(inStr);
int[] array1 = {11,23,4,2,1,10};
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));
String[] array2 = {"o","z","d","s","a"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));
}
}
运行结果图

6、字符串倒叙排列
package cn.intcast.demo14;
import java.util.Arrays;
public class Code01Arrays {
public static void main(String[] args) {
String intArray = "qweraszxc";
char[] chars = intArray.toCharArray();
Arrays.sort(chars);
for (int i = chars.length - 1; i >= 0; i--) {
System.out.print(chars[i]+",");
}
}
}
运行结果图

JAVA进阶14的更多相关文章
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
- Java进阶(五十三)屡试不爽之正则表达式
Java进阶(五十三)屡试不爽之正则表达式 在线测试网址: http://tool.oschina.net/regex/# 上面的在线测试网址,含有正则表达式的生成,非常实用.大家共勉之! 匹配中文: ...
- Java进阶之路
Java进阶之路——从初级程序员到架构师,从小工到专家. 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序 ...
- Java进阶7并发优化4——JDK并发数据结构
Java进阶7并发优化4——JDK并发数据结构20131114 由于并发程序和串行程序的不同特点,在串行程序中使用的数据结构可能无法在并行程序中直接的正常使用,因为这些数据结构可能不是线程安全的,所以 ...
- java进阶视频分享
更多资源和教程请关注公众号:非科班的科班. 如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力 课程目录介绍 01.开班仪式02.并发编程专题之多线程基础03.并发编程专题之Java内存模 ...
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术
[.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...
随机推荐
- Linux新增和删除环境变量
vi ~/.bashrc 添加 export 变量名=值 使环境变量生效 source ~/.bashrc
- Mistwald zoj 3497
链接 [https://vjudge.net/contest/294259#problem/K] 题意 就是有个m*n矩阵 出发(1,1) 出口(m,n) 然后给出每个点能到大的四个位置 而且一旦到达 ...
- JSON获取地址
JSON获取地址一: https://github.com/stleary/JSON-java JSON获取地址二: http://genson.io/ JSON获取地址一: https://code ...
- 第一个Appium脚本
测试环境 Win 10 64bit Python 3.5 Appium 1.7.2 Andriod 5.1.1 模拟器& Android 5.1 MX4 测试App:考研帮Android版 3 ...
- monkeyrunner简介
monkeyrunner简介 MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Py ...
- Java8 list转map 坑
Map<String , SonCargosForm> orderCargosMap = sonTemporaryForm.getOrderCargosList().stream() .c ...
- Go语言中的闭包
一.函数的变量作用域和可见性 1.全局变量在main函数执行之前初始化,全局可见 2.局部变量在函数内部或者if.for等语句块有效,使用之后外部不可见 3.全局变量和局部变量同名的情况下,局部变量生 ...
- django xadmin(1)
filter_horizontal 从‘多选框’的形式改变为‘过滤器’的方式,水平排列过滤器,必须是一个 ManyToManyField类型,且不能用于 ForeignKey字段,默认地,管理工具使用 ...
- tornado之用户验证装饰器
authenticated装饰器 为了使用Tornado的认证功能,我们需要对登录用户标记具体的处理函数.我们可以使用@tornado.web.authenticated装饰器完成它.当我们使用这个装 ...
- Codeforces Round #520 (Div. 2) B. Math 唯一分解定理+贪心
题意:给出一个x 可以做两种操作 ①sqrt(x) 注意必须是完全平方数 ② x*=k (k为任意数) 问能达到的最小的x是多少 思路: 由题意以及 操作 应该联想到唯一分解定理 经过 ...