
private void Form1_Load(object sender, EventArgs e)
{
thistimer1Start();
}
//注意 三个label显示的时间区别
private void timer1_Tick(object sender, EventArgs e)
{
label2Text = SystemDateTimeNowToString() + "" + DateTimeNowMillisecondToString();
label3Text = SystemDateTimeNowToString();
label4Text = DateTimeNowToString("yyyyMMddHHmmss");
}
package comGUI;
import javaawt;
import javautil;
import javaxswing;
import javaawtevent;
public class Main extends JFrame implements Runnable,ActionListener{
/
/
private static final long serialVersionUID = 1L;
static JPanel pU,pUL,pUC,pL,pD,pR,pR0;
JScrollPane spL,spR;
JLabel laR,laU,laU0,laDT;
public static JButton btBs,btPr,btIn,btEx,btSy;
static CardLayout card;
GridBagLayout gb;
GridBagConstraints gc;
Icon ic1,ic2;
Thread th1 = new Thread(this);
Thread th2 = new Thread(this);
Main(){
th1start();//开始线程
th2start();
pU = new JPanel();//上部面板
pL = new JPanel();pLsetBackground(new Color (205,255,205));//左边面板
pR = new JPanel();//右边主面板
pD = new JPanel();pDsetBackground(new Color (205,255,205));//下部面板
pR0 = new JPanel();pR0setBackground(new Color (205,255,205));//右边面板
pUL = new JPanel();pULsetBackground(new Color (205,255,205));//
pUC = new JPanel();pUCsetBackground(new Color (205,255,205));
card = new CardLayout();
laR = new JLabel();//右边面板上的标签
laU = new JLabel();//上部面板上的标签
laU0 = new JLabel();
laDT = new JLabel();//下部板上的标签
spL = new JScrollPane(pL);
spR = new JScrollPane(pR0);
btBs = new JButton("基本信息");btBsaddActionListener(this);
btPr = new JButton("货品管理");btPraddActionListener(this);
btIn = new JButton("入库管理");btInaddActionListener(this);
btEx = new JButton("出库管理");btExaddActionListener(this);
btSy = new JButton("系统信息");btSyaddActionListener(this);
//实例化网格袋布局、约束和图形
gb = new GridBagLayout();
gc = new GridBagConstraints();
ic1 = new ImageIcon("logojpg");
ic2 = new ImageIcon("mainjpg");
//按钮起始状态的设置
btBssetEnabled(false);
btPrsetEnabled(false);
btInsetEnabled(false);
btExsetEnabled(false);
thisgetContentPane()setLayout(new BorderLayout());
//面板布局设置
pLsetLayout(gb);
pRsetLayout(card);
pUsetLayout(new BorderLayout());
pDsetLayout(new FlowLayout(FlowLayoutRIGHT));
//框架添加对象
add(pU,"North");
add(spL,"West");
add(pR,"Center");
add(pD,"South");
//上部面板添加对象
pUadd(pUL,"West");
pUadd(pUC,"Center");
pULadd(laU);
pUCadd(laU0);
laUsetIcon(ic1);
laU0setText("成都市天美日用品公司");
laU0setFont(new Font("华文行楷",FontBOLD,60));
//laUsetHorizontalTextPosition(JLabelRIGHT);//设置标签的文本相对其图像的水平位置
//左边面板添加对象
gcgridx = 10;
gcgridy = 10;
gcweighty = 2;
gcweightx = 2;
gcanchor = GridBagConstraintsCENTER;
pLadd(btBs,gc);
gcgridy = 20;
pLadd(btPr,gc);
gcgridy = 30;
pLadd(btIn,gc);
gcgridy = 40;
pLadd(btEx,gc);
gcgridy = 50;
pLadd(btSy,gc);
//右边面板添加对象
pRadd(spR,"spR");
pR0add(laR);
laRsetIcon(ic2);
//下部面板添加对象
pDadd(laDT);
laDTsetHorizontalAlignment(JLabelRIGHT);
cardshow(pR,"spR");
//setIconImage(ToolkitgetDefaultToolkit()getImage("top0bmp"));
setSize(800,600);
setResizable(false);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
public void run() {
try{
while(true){
if(ThreadcurrentThread()==th1){
Calendar cal = CalendargetInstance();
int y = calget(CalendarYEAR);
int mon = calget(CalendarMONTH)+1;
int d = calget(CalendarDATE);
int h = calget(CalendarHOUR);
int min = calget(CalendarMINUTE);
int s = calget(CalendarSECOND);
int ap = calget(CalendarAM_PM);
if(ap==1)
h = h+12;
laDTsetText("启点团队制作 "+"日期:"+y+"-"+((mon<=9)"0"+mon:mon)+"-"+((d<=9)"0"+d:d)+" 时间:"+h+":"+((min<=9)"0"+min:min)+":"+((s<=9)"0"+s:s));
laDTsetFont(new Font("楷体",FontPLAIN,15));
Threadsleep(1000);
}
if(ThreadcurrentThread()==th2){
Random rd = new Random();
int red = rdnextInt(255);
int green = rdnextInt(255);
int blue = rdnextInt(255);
Color c = new Color(red,green,blue);
laU0setForeground(c);
Threadsleep(500);
}
}
}catch(Exception ee){
eegetStackTrace();
}
}
public void actionPerformed(ActionEvent ae) {
}
private static Main obj;
public static Main getMain(){
return obj;
}
public static void main(String as[]){
obj = new Main();
}
}
这个应该可以帮到你
不一定,这取决于 *** 作系统的调度机制。
1、如系统使用时间片轮转法,线程使用时间越长,下一次获得时间片的可能性就越小。
2、如使用优先级调度,线程在某处理器上执行的时间越长,则表明该线程优先级比其他线程高,有可能会优先获得时间片。
将每个 Thread 新建之后赋值给一个引用,如 Thread t = new Thread();
然后调用 tjoin(); 这个方法会等待当前线程执行完。就是下面这样:
long t1 = SystemcurrentTimeMillis();Thread[] threads = new Thread[20];
for (int i = 0; i < 20; i++) {
threads[i] = new Thread(new Runnable() {
public void run() {
try {
Systemoutprintln(Version[Low/High]EffectivegetInstance());
} catch (Exception e) {
eprintStackTrace();
}
}
});
threads[i]start();
}
for (int i = 0; i < 20; i++) {
threads[i]join();
}
long t2 = SystemcurrentTimeMillis();
Systemoutprintln("耗时:" + (t2 - t1) + "毫秒");
至于双重检查为什么要加 volatile,是因为 volatile 关键字在 JDK5 之后,保证了被其修饰的变量的可见性(JDK5 之前的版本是不可以的)。Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比(如果与原始变量不一致则修改原始变量)。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而volatile赋予了变量可见性——禁止编译器对成员变量进行优化,它修饰的成员变量在每次被线程访问时,都强迫从内存中重读该成员变量的值;而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存,这样在任何时刻两个不同线程总是看到某一成员变量的同一个值,这就是保证了可见性。
所以,假设你的 private static volatile VersionHighEffective me=null; 没有 volatile 关键字(那么就是 private static VersionHighEffective me=null;),假设线程 t1 已经 new 了一个 VersionHighEffective 实例,但是这个实例目前可能只是保存在 t1 的“范围”里,还没有被写到主存;此时线程 t2 去执行这段代码:
if(me==null){synchronized (VersionHighEffectiveclass) {
if (me == null) {
Threadsleep(500);
me = new VersionHighEffective();
}
}
}
很明显 t2 从主存那访问到的 me 仍然是 null,所以最后 t2 又去 new 了一个 VersionHighEffective,这样就不是单例了。所以,加上 volatile 修饰,每次的修改后的变量都会强迫立即写到主存,那么前面的问题就不存在了。
以上就是关于C#如何一秒钟获取一次当前时间并显示在文本框中,要启动线程的,在线等。。。。全部的内容,包括:C#如何一秒钟获取一次当前时间并显示在文本框中,要启动线程的,在线等。。。。、Java 多线程 显示当前时间、某个线程在某个处理器上执行的时间越长,是不是下次更容易获得时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)