java 线程难不难_JAVA线程基础,我会一直写线程,因为很重要也很难!

今天刚刚讲到java中的线程,随便也就复习下今天的知识。

在我们学习线程之前所写的类,都是单线程的类,线程是控制线程的简写(thread

of control)。

线程是一个程序中与其他线程无关的能独立运行的代码片段。控制了线程在程序中运行的路径,也就控制了执行的代码。Java

多线程编程其实并不象大多数的书描述的那样简单,所有关于UI(用户界面)的Java编程都要涉及多线程。正如下午刘老提到,在做游戏项目是对线程的处理更为复杂,困难。

想让对象具有多线程的功能,只要继承java.lang.Thread类或者是实现java.lang.Runnable接口。

一个线程是进程中的一个执行流程。一个进程中可以同时包括多个线程。也就是说,一个程序中同时可能进行多个不同的子流程,每个子流程可以得到一小段程序的执行时间,每执行完一个线程就跳到下一个线程。由于转换的速度很快,这使得一个程序可以像是同时处理多个任务。

在java中要实现线程功能,可以继承java.lang.Thread类,并重新定义run()方法,之后实例化自定义的Thread类,接着使用start()方法启动线程。

下面是一个继承Thread类来获得线程的例子:

package com.lovo.test;

public class TwoThread extends Thread {

/**

* @param args

*//覆盖run(),线程从run()开始执行,同时并发执行

public void run()

{

for(int i=0;i<10;i++){

System.out.println("New thread");

}

}

public static void main(String[] args) {

// TODO 自动生成方法存根

TwoThread tt=new TwoThread();

tt.start();//启动线程

for(int i=0;i<10;i++){

System.out.println("Main thread");

}

}

}

由于java

是单继承,假如一个类继承了Thread类,那么就不能继承其他类了,

可以实现java.lang.Runnable接口来定义具有线程功能的类,Runnable接口中定义一个run()方法来实现,在实例化一个Thread对象时,可以传入一个实现Runnable接口的对象作为变量。Thread对象会调用Runnable对象的run()方法,进而执行其中所定义的流程。

下面是一个实现java.lang.Runnable接口来定义具有线程功能的类:

package com.lovo.test;

class MyThread implements Runnable{

int count;

Thread thrd;

MyThread(String name)

{

thrd=new Thread(this,name);

count=0;

thrd.start();

}

public void run()

{

System.out.println(thrd.getName()+"Staring");

try

{

do{

Thread.sleep(1500);

System.out.println("In"+thrd.getName()+",count is"+count);

count++;

}while(count<10);

}

catch(InterruptedException exc)

{

System.out.println(thrd.getName()+"interrupted");

}

System.out.println(thrd.getName()+"terminating ");

}

public static void main(String[] args) {

System.out.println("main thread star");

new MyThread("线程1");

new MyThread("线程2");

new MyThread("线程3");

}

}

线程具有优先权,由1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY),默认是5(Thread.NORM_PRIORITY)。可以使用Thread的setPriority()方法来设定线程的优先权,设定必须在1到10之间,否则会抛出异常java.lang.IllegalArgumentException。

优先权高的线程会先被执行完毕,然后才会轮到优先权低的线程。如果优先权相同,则轮流执行。假如你用的是双核的电脑,情况又不一样了,由于CPU在处理方式是抢占式,也就是当一个CPU占用的资源较少时,会抢先执行线程。

下面是一个关于线程优先权的例子,放在双核的机器上会有不同的输出:

package com.lovo.test;

public class PriorityDemo implements Runnable{

Thread thrd;

PriorityDemo(String name){

thrd=new Thread(this,name);

}

public void run()

{

System.out.println(thrd.getName()+"已经启动");

System.out.println(thrd.getName()+"已经停下"+"\n");

}

public static void main(String[] args) {

// TODO 自动生成方法存根

PriorityDemo mt1=new PriorityDemo("低优先级的线程");

PriorityDemo mt2=new PriorityDemo("高优先级的线程");

mt1.thrd.setPriority(Thread.NORM_PRIORITY-2);

mt2.thrd.setPriority(Thread.NORM_PRIORITY+2);

mt1.thrd.start();

mt2.thrd.start();

}

}

回顾了下今天所讲的线程内容,也许有地方不是很详细,但后面还要讲到更多关于线程的知识。比如说线程的加入,线程的停止,线程的同步和线程的安全等。

不写了,0点过了 。^_^

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值