java线程认识基础.docx
- 文档编号:25203150
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:25
- 大小:20.66KB
java线程认识基础.docx
《java线程认识基础.docx》由会员分享,可在线阅读,更多相关《java线程认识基础.docx(25页珍藏版)》请在冰豆网上搜索。
java线程认识基础
线程
创建线程的两种方式:
1)继承Thread类的方式
2)实现Runnable接口的方式
3)通过匿名内部类;来创建线程
publicclassThreadDemo7{
publicstaticvoidmain(String[]args){
Runnablerunnable=newRunnable(){
@Override
publicvoidrun(){
for(inti=0;i<5;i++){
System.out.println("运行线程"+i);
}
}
};
Threadthread=newThread(runnable);
thread.start();
}
}
Thread类中的run方法本身并不执行任何操作
线程的启动用的是start()方法执行的是run()
两种创建线程的区别:
1,Thread是继承,Runnable是实现使用Runnable接口可以避免单继承,Thread只能是单继承
2,使用Runnable接口可以实现资源的共享,
获得线程的名字:
Thread.currentThread().getName()
设置线程的名字:
thread2.setName("我不是优先级");
获得线程的优先级:
Thread.currentThread().getPriority()
设置线程的优先级:
thread1.setPriority(Thread.MAX_PRIORITY);
线程最大的优先级为:
10默认为:
5,最小的为:
1
join()霸占线程,必须等待改线程结束
synchronized锁的是共享资源
1线程测试
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemoextendsThread{
privateStringname;
publicThreadDemo(Stringname){
this.name=name;
}
publicvoidrun(){//方法重写
for(inti=0;i<10;i++){
System.out.println(name+""+i);
}
}
publicstaticvoidmain(String[]args){
ThreadDemothread1=newThreadDemo("线程1");
ThreadDemothread2=newThreadDemo("线程2");
thread1.start();
thread2.start();;//启动线程调用的是run方法
}
}
输出
线程10线程20线程11
线程21线程22线程12线程23线程13线程14线程15线程16线程17
线程18线程19线程24线程25线程26线程27线程28线程29
2线程测试cup随机分配
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemo2implementsRunnable{
privateStringname;
publicThreadDemo2(Stringname){
this.name=name;
}
@Override
publicvoidrun(){
for(inti=0;i<10;i++){
System.out.println(name+""+i);
}
}
publicstaticvoidmain(String[]args){
ThreadDemo2thread1=newThreadDemo2("线程1");
ThreadDemo2thread2=newThreadDemo2("线程2");
ThreadDemo2thread3=newThreadDemo2("线程3");
newThread(thread1).start();
newThread(thread2).start();
newThread(thread3).start();
}
}
输出
线程10线程11线程12线程13线程14线程30线程20线程21线程22线程23线程31线程15线程32线程33线程34线程24线程35线程16线程17线程18线程36线程25线程37线程19线程38线程39线程26线程27线程28线程29
3测试count
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemo3extendsThread{
privateStringname;
publicThreadDemo3(Stringname){
this.name=name;
}
privateintcount=5;
@Override
publicvoidrun(){
for(inti=0;i<50;i++){
if(this.count>0){
System.out.println("count"+this.count--+""+name);
}
}
}
publicstaticvoidmain(String[]args){
newThreadDemo3("线程1").start();
newThreadDemo3("线程2").start();
newThreadDemo3("线程3").start();
}
}
输出
count5线程1count5线程2count5线程3count4线程1count4线程3count4线程2count3线程3count3线程1count2线程3
count3线程2count1线程3count2线程1count2线程2count1线程1count1线程2
4线程占用时间块
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemo4implementsRunnable{
privateStringname;
publicThreadDemo4(Stringname){
this.name=name;
}
privateintcount=5;
@Override
publicvoidrun(){//重写run
for(inti=0;i<50;i++){
if(this.count>0){
System.out.println("count"+this.count--+""+name);
}
}
}
publicstaticvoidmain(String[]args){
ThreadDemo4thread=newThreadDemo4("线程1");
newThread(thread).start();
newThread(thread).start();
newThread(thread).start();
}
}
输出
count4线程1count2线程1count1线程1count5线程1count3线程1
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemo5extendsThread{
privateStringname;
publicThreadDemo5(Stringname){
this.name=name;
}
publicvoidrun(){
for(inti=0;i<10;i++){
System.out.println(name+""+i);
}
}
publicstaticvoidmain(String[]args){
ThreadDemo5thread1=newThreadDemo5("线程1");
ThreadDemo5thread2=newThreadDemo5("线程2");
thread1.run();
thread2.run();//只是调用的普通的run()
}
}
5实现runnbale创建线程
packagecom.chinasofti.eec.threaddemo;
/**
*实现runnbale接口创建线程
*适合多个线程处理同一资源
*可以多实现
*健壮性代码能被多个线程共享,代码和数据是独立
*@authorAdministrator
*
*/
publicclassThreadDemo6implementsRunnable{
inttickets=10;
@Override
publicvoidrun(){
for(inti=0;i<100;i++){
if(tickets>0){
System.out.println("卖的票数:
"+tickets--);
}
}
}
publicstaticvoidmain(String[]args){
Runnablerunable=newThreadDemo6();
newThread(runable).start();
newThread(runable).start();
newThread(runable).start();
}
}
6匿名只使用一次
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemo7{
publicstaticvoidmain(String[]args){
Runnablerunnable=newRunnable(){
@Override
publicvoidrun(){
for(inti=0;i<5;i++){
System.out.println("运行线程"+i);
}
}
};
Threadthread=newThread(runnable);
thread.start();
}
}
7匿名内部类
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemo8{
publicstaticvoidmain(String[]args){
Threadthread=newThread(){
//staticStringname;匿名内部类不能有静态成员
@Override
publicvoidrun(){
for(inti=0;i<5;i++){
System.out.println("运行线程"+i);
}
}
};
thread.start();
}
}
8线程星空
packagecom.chinasofti.eec.threaddemo;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassStarts{
publicstaticvoidmain(String[]args){
JFramejf=newJFrame("星星");
jf.setSize(1024,780);
jf.setLocationRelativeTo(null);
Showshow=newShow();
jf.add(show);
Threadthread=newThread(show);
thread.start();
jf.setVisible(true);
}
}
classShowextendsJPanelimplementsRunnable{//jpanel面板
@Override
publicvoidpaint(Graphicsg){
g.setColor(Color.black);
g.fillRect(0,0,1024,780);
g.setColor(newColor((int)((Math.random()*255)-1),(int)((Math.random()*255)-1),(int)((Math.random()*255)-1)));
g.fillRoundRect(600,100,200,200,200,200);
g.setColor(Color.black);
g.fillRoundRect(650,80,200,200,200,200);
g.setColor(newColor((int)((Math.random()*255)-1),(int)((Math.random()*255)-1),(int)((Math.random()*255)-1)));
for(inti=0;i<300;i++){
Fontfont=newFont("宋体",Font.BOLD,(int)(Math.random()*19));
intx=(int)(Math.random()*1024-1);
inty=(int)(Math.random()*1024-1);
g.setFont(font);
g.drawString("☆",x,y);
}
}
@Override
publicvoidrun(){
while(true){
try{
Thread.sleep(300);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
repaint();
}
}
}
9电子表
packagecom.chinasofti.eec.threaddemo;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.util.Date;
importjavax.swing.JFrame;
publicclassTimeThreadextendsJFrameimplementsRunnable{//图形界面
Threadclock=null;
publicTimeThread(){//画数字时钟
setTitle("数字时钟");
this.setFont(newFont("宋体",Font.BOLD,60));//设置字体大小
setBounds(400,300,300,100);
this.setVisible(true);
this.go();
}
publicvoidgo(){
if(clock==null){
clock=newThread(this);
clock.start();
}
}
@Override
publicvoidrun(){
while(true){
repaint();
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
publicvoidpaint(Graphicsg){//自动调用
Strings=null;
Datenow=newDate();
inthour=now.getHours();
intminute=now.getMinutes();
intsecond=now.getSeconds();
s=hour+":
"+minute+":
"+second;
g.setColor(Color.red);//设置画笔的颜色
Dimensiondim=newDimension(300,200);//单个对象中组件的宽度和高度
g.fillRect(0,0,dim.width,dim.height);//填充矩形
g.setColor(Color.yellow);
g.drawString(s,20,80);
}
publicstaticvoidmain(String[]args){
TimeThreadtime=newTimeThread();
time.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
10线程优先级
packagecom.chinasofti.eec.threaddemo;
publicclassThreadDemo9implementsRunnable{
publicstaticvoidmain(String[]args){
Runnablerunable=newThreadDemo9();
Threadthread1=newThread(runable);
Threadthread2=newThread(runable);
thread1.setName("我是优先级");
thread1.setPriority(Thread.MAX_PRIORITY);
thread2.setName("我不是优先级");
thread1.setPriority(Thread.MIN_PRIORITY);
thread1.start();
thread2.start();
}
@Override
publicvoidrun(){
while(true){
System.out.println("当前的线程为:
"+Thread.currentThread().getName()+
"线程的ID为:
"+Thread.currentThread().getId()+
"线程的优先级:
"+Thread.currentThread().getPriority());
try{
Thread.sleep(3000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
输出
当前的线程为:
我不是优先级线程的ID为:
11线程的优先级:
5
当前的线程为:
我是优先级线程的ID为:
10线程的优先级:
1
11多线程安全问题
packagecom.chinasofti.eec.threaddemo;
/**
*算1-100的奇数
*@authorAdministrator
*多线程并发出现安全问题
*/
publicclassSynchronizedDemo{
privatestaticintnum=1;//从1开始计算
publicstaticvoidmain(String[]args){
finalSynchronizedDemodemo=newSynchronizedDemo();
newThread(newRunnable(){
@Override
publicvoidrun(){
while(num<91){
for(inti=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"===="+num);
num+=2;
}
}
}
}).start();
newThread(newRunnable(){
@Override
publicvoidrun(){
while(num<91){
for(inti=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+"===="+num);
num+=2;
}
}
}
}).start();
}
}
12线程锁
packagecom.chinasofti.eec.threaddemo;
/**
*算1-100的奇数
*@authorAdministrator
*多线程并发出现安全问题
*/
public
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 线程 认识 基础