技术标签: java
1)继承Thread类,重写run方法
2)实现Runnable接口
3)实现Callable接口
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println("子线程............"+i);
}
}
}
public class TestThread {
public static void main(String[] args) {
//1.创建线程对象
MyThread myThread = new MyThread();
//2.启动线程类
myThread.start();
//3.打印主线程
for (int i = 0; i < 50; i++) {
System.out.println("主线程========="+i);
}
}
}
如下面的第4步执行的结果会出现重复的,你该怎么办?
public class TestThread {
public static void main(String[] args) {
//1.创建线程对象
MyThread myThread = new MyThread();
//2.启动线程类
myThread.start();
//4.创建线程对象2
MyThread myThread2 = new MyThread();
myThread2.start();
//3.打印主线程
for (int i = 0; i < 50; i++) {
System.out.println("主线程========="+i);
}
}
}
问题答案解决
获取线程ID和线程名称
1.)在Thread的子类中调用this.getId()或this.getName()
2.)使用Thread.currentThread.getId()和Thread.currentThread.getName()
修改线程名称
1.调用线程对象的setName()方法
2.使用线程子类的构造方法赋值
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println("线程ID:"+this.getId()+"线程名称:"+this.getName()+"子线程............"+i);
}
}
}
第二种方式
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i <100; i++) {
System.out.println("线程ID:"+Thread.currentThread().getId()+"线程名称:"+Thread.currentThread().getName()+"子线程..........."+i);
}
}
}
修改线程名称
方式1:
public class TestThread {
public static void main(String[] args) {
//1.创建线程对象
MyThread myThread = new MyThread();
//2.启动线程类
//5.修改线程名称(在启动之类修改)
myThread.setName("我是子线程1");
myThread.start();
//4.创建线程对象2
MyThread myThread2 = new MyThread();
myThread2.setName("我是子线程2");
myThread2.start();
//3.打印主线程
for (int i = 0; i < 50; i++) {
System.out.println("主线程========="+i);
}
}
}
方式2:
public class MyThread extends Thread{
public MyThread() {
// TODO Auto-generated constructor stub
}
public MyThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i <100; i++) {
//System.out.println("线程ID:"+this.getId()+"线程名称:"+this.getName()+"子线程............"+i);
System.out.println("线程ID:"+Thread.currentThread().getId()+"线程名称:"+Thread.currentThread().getName()+"子线程..........."+i);
}
}
}
public class TestThread {
public static void main(String[] args) {
//1.创建线程对象
MyThread myThread = new MyThread("我是子线程1");
//2.启动线程类
//5.修改线程名称(在启动之类修改)
//myThread.setName("我是子线程1");
myThread.start();
//4.创建线程对象2
MyThread myThread2 = new MyThread("我是子线程2");
//myThread2.setName("我是子线程2");
myThread2.start();
//3.打印主线程
for (int i = 0; i < 50; i++) {
System.out.println("主线程========="+i);
}
}
}
案例:卖票问题
/**
* 卖票窗口类
* @author DELL
*
*/
public class TicketWin extends Thread{
public TicketWin() {
// TODO Auto-generated constructor stub
}
public TicketWin(String name) {
super(name);
}
private int ticket=100;//票
@Override
public void run() {
//卖票功能
while(true) {
if(ticket <=0 ) {
break;
}
System.out.println(Thread.currentThread().getName()+"卖出第"+ticket+"张");
ticket--;
}
}
public class TestticketWin {
public static void main(String[] args) {
//创建四个卖票窗口
TicketWin w1 = new TicketWin("窗口1");
TicketWin w2 = new TicketWin("窗口2");
TicketWin w3 = new TicketWin("窗口3");
TicketWin w4 = new TicketWin("窗口4");
//启动线程
w1.start();
w2.start();
w3.start();
w4.start();
}
}
简单有效的“单键复用”C51程序2009-08-25 00:27<br /> 在做我的MINI POV时,考虑到空间有限,必须简化结构,尽量减少按键数量,最后设计只用两个按键作模式转换和时间调整,这样,需将其中的一键“单键复用”,采用最常见的是“短击”、“长击”和“双击”三种模式。这样一来编程就成了问题。<br /> 然而,真不明白一个简单的“单键复用”的问题居然在网上还找不到合适的现成的程序,找到的也是一些高深莫测的(还用上什么状态机之类的)东西。没办法,还是自己动手吧!<b
JavaWeb学习——页面跳转方式摘要:本文主要学习了请求转发和响应重定向,以及两者之间的区别。请求转发相关方法使用HttpServletRequest对象的getRequestDispatcher(String path)方法获取RequestDispatcher类型的转发器。使用RequestDispatcher转发器的forward(ServletRequest request, Se...
bitsCN.com从服务器上通过mysqldump命令导出文件在导入到另外的库时,提示:MySQL 返回:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USI...
1 使用UIDynamicAnimator对集合视图进行布局1.1 问题UIKit Dynamic动力模型一个非常有趣的用途就是影响集合视图的布局,可以给集合视图的布局添加各种动力行为,使其产生丰富多彩的效果,本案例使用UIDynamicAnimator对集合视图进行布局,实现一个弹性列表,如图-1所示:图-11.2 方案首先创建一个SingleViewApplicat...
mac mysql安装
我无法使接受的解决方案有效 . 我一直在研究这个问题,最后我通过使用这里解释的想法并在这个帖子上写了我的解决方案“null client in OAuth2 Multi-Factor Authentication”如果您发现任何问题或更好的方法,我感谢您分享您的反馈意见 .您可以在下面找到此解决方案的关键配置文件 [email protected]@E...
本文已加入专栏文章目录。精简版GitHub Page 的(一种)输入是 markdown 文件,输出是 HTML/CSS/JS 文件。如果 markdown 文件包含代码块,且代码块中包含花括号 { 或 },尤其是包含 {% 或 {{ 符号组合时,GitHub Page 会报错。分别在代码块前后添加 {% raw %} 和 {% endraw %} 即可解决该问题。参考资料:Jekyll 官方文...
一. 必备知识1.wsdl(web服务标记语言)WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。具体参考请访问下面网址2.soapSOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。具体参考请访问下面网址3.php扩展具体参考请访问...
桫哥-GOlang-09反射 多年互联网从业经验;有丰富的的企业网站、手游...
ELK企业级日志分析系统文章目录ELK企业级日志分析系统ELK概述1.ELK简介ElasticSearch:(存储搜索日志)Logstash:(搜集日志)可以添加的其它组件:Kiabana:(提供图形化展示)filebeat结合logstash带来好处:2、为什么要使用ELK:3、完整日志系统基本特征4、ELK的工作原理:部署ELK日志分析系统配置elasticsearch环境部署elasticsearch软件(6)查看节点信息3.安装 Elasticsearch-head 插件(1)编译安装 node(
本人使用的是ubuntu 18.04版本虚拟机但是在与windows 下共享的文件夹看不到, /mnt/hgfs/ 文件夹里面是空的经过查找别人的博客,发现只要执行sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid=1000即可成功...